Заставьте recyclerView реагировать на события щелчка, когда он не прокручивается:

я естьRecyclerView, Внутри его адаптераonBindViewHolder() Я установил OnClickListener в корневой макет ViewHolder.

Однако недавно я заметил, что не могу нажать наRecyclerViewпредметы во время прокрутки. Только после того, как это остановлено. Если я нажму где-нибудь наRecyclerView пока я прокручиваюRecyclerView останавливается только в этой позиции, ни один элемент не нажимается.

Вы можете видеть, что я имею в виду в приложении Gmail. Вы не можете открыть ни одно электронное письмо, пока прокручиваете егоRecyclerView.

Однако приложение Google Play ведет себя по-другому. Вы можете открывать страницы приложений при прокрутке списков приложений. Вы даже можете прокрутить внутреннийRecyclerViews горизонтально, в то время как родительRecyclerView прокручивается

Также я заметил такое же поведение для ScrollView. Например, если вы поместите в него много кнопок и начнете их прокручивать, прослушиватели кнопок не сработают. Они могут быть запущены только после полной остановки ScrollView.

У вас есть идея, как можно добиться такого поведения, как в приложении Google Play? Спасибо!

 Sergey29 сент. 2017 г., 20:57
@VikasTiwari Привет, спасибо за редактирование поста!
 UltimateDevil29 сент. 2017 г., 20:15
проверитьэто может быть полезным

Ответы на вопрос(4)

чтобы пользователи могли прокручивать их, не нажимая случайно, чтобы открыть новые окна или детали. Пользователи Android ожидают прокрутки, чтобы предотвратить щелчок. Как только вы остановитесь, вы ожидаете, что нажмите, чтобы показать детали. Вы, конечно, можете сделать это, если хотите, переопределив onTouch и решив, как обрабатывать событие касания, если оно передается в представление переработчика или элементы строк, но я думаю, что вы создаете плохой пользовательский интерфейс. Я попробовал магазин приложений, он останавливается, когда вы прикасаетесь к нему. Не уверен, что вы имели в виду, прокручивая при открытом щелчке или горизонтальной прокрутке, потому что, если я прокручиваю по вертикали, а затем смахиваю влево, это просто меняет средство просмотра страницы.

Так что, возможно, не тот ответ, который вам нужен, но я думаю, что пользовательский опыт важнее, чем «крутой эффект касания при прокрутке». Если бы Android хотел, чтобы это был их опыт работы с ОС, он был бы встроен. Теперь это не относится ко всем вещам, таким как изменяемые элементы строк, но стандартная обработка списка основных деталей довольно стандартизирована.

 Sam29 сент. 2017 г., 21:12
Да, хорошо, это имеет больше смысла. Хотя у меня есть много приложений, у которых есть просмотрщики страниц с вложенными просмотрами переработчиков, и ни одно из них не препятствует моему переходу между страницами во время просмотра списка. Поэтому я не уверен, почему вы так себя ведете. То есть вы говорите, что если вы бросите список, а затем проведете по нему, он проигнорирует ваш?
 Sergey29 сент. 2017 г., 22:12
Хм, это странно. Может быть, я сделал что-то не так. Да, вы правы, в моем случае мне нужно подождать, прежде чем я смогу пролистать до следующей страницы ... Также у меня есть другая часть приложения, где есть ViewPager, и каждая страница - это просто ScrollView с несколькими TextViews (например, руководство). Это также ведет себя так. Если я переверну одну страницу и попытаюсь пролистать до следующей, я не смогу. Я попробовал то же самое на другом телефоне с Android 4.1.2 (первый имеет Android 7.0). Он ведет себя так же ...
 Sergey29 сент. 2017 г., 22:22
Ну, есть два разных вида деятельности. Один имеет ViewPager с фрагментами на основе RecyclerView. А в другом действии есть ViewPager с фрагментами на основе ScrollView. Оба варианта ведут себя одинаково. Если вы начнете прокручивать страницу и сразу попытаетесь перейти к следующей странице (как будто начальная прокрутка все еще выполняется), она не сможет пролистать.
 Sam29 сент. 2017 г., 22:13
Хорошо, тогда все по-другому. Имеете ли вы дело с просмотром прокрутки на просмотр страницы или просмотром переработчика? Работает ли он нормально на страницах просмотра переработчика, но не на страницах прокрутки?
 Sergey29 сент. 2017 г., 21:05
Привет Сэм, большое спасибо за ваше предложение! Вы правы в отношении пользовательского опыта. У меня были похожие мысли. Однако на самом деле мне нужно что-то похожее на панель просмотра приложения Google Play. Я не пытался объяснить это в своем первоначальном вопросе, потому что это завершило бы его. У меня есть 2-3 страницы с RecyclerViews, и я не могу свободно перемещаться между ними, когда застреваю во время процесса прокрутки в RecyclerView (можно пролистать до следующей страницы, только когда прокрутка полностью остановлена). Итак, я подумал, что, может быть, у кого-то есть готовый обходной путь для этого случая.

Вот код, написанный Кими Чиу всвязанный вопрос:

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    boolean requestCancelDisallowInterceptTouchEvent = getScrollState() == SCROLL_STATE_SETTLING;
    boolean consumed = super.onInterceptTouchEvent(event);
    final int action = event.getActionMasked();

    switch (action) {
        case MotionEvent.ACTION_DOWN:
            if( requestCancelDisallowInterceptTouchEvent ){
                getParent().requestDisallowInterceptTouchEvent(false);
                // stop scroll to enable child view get the touch event
                stopScroll();
                // not consume the event
                return false;
            }
            break;
    }

    return consumed;
}

Если вы подклассRecyclerView Класс и переопределить этот метод, он будет вести себя как в вопросе.

когда он не прокручивается:

if (recyclerView.scrollState == SCROLL_STATE_IDLE) {
    onItemClicked()
}

го элемента прокрутки. Как правило, это то, что вам нужно сделать, если вы хотите, чтобы представление горизонтального прокрутки с горизонтальной прокруткой находилось в представлении родительского переработчика с вертикальной прокруткой. Вы можете сделать это для любого вида прокрутки в целом.

Ваш ответ на вопрос