Добрый день! Очень часто в примерах встречаю логику обработки клика непосредственно в адаптере RecyclerView, и в связи с этим возник вопрос - разве не нужно разделять адаптер и логику? Ведь можно в адаптере повесить листенер на вьюху, а обработку писать уже в другом классе? Тем не менее, часто вижу что логику пишут прям в адаптере. Насколько распространена такая практика в реальных проектах, есть ли какие-нибудь conventions или best practices на этот счет?
Обязательно. Ставим RecyclerView.OnItemsTouchListener в нем переопределяем onInterceptTouchEvent() - если необходимо обрабатывать для для пришедшего ивента - то вызваем метод onTouchEvent() созданного ранее GestureDetector с реализованным и установленным GestureListener, в котором обрабатываем необходимый нам тач. Только так.
Как я понял, если использовать RecyclerView.OnItemsTouchListenerв адаптере, то это может сказаться на производительности, и может быть заметная задержка между нажатием и обработкой события...
Интересно, а почему вы так считаете? Данное утверждение связано с наблюдениями и замерами? Дело в том, что у нас так работает очень нагруженный бесконечный список - и задержек никаких нет.
Согласен, только я спрашивал где логику реализовывать (в адаптере или в отдельном классе, во фрагменте в котором этот RecyclerView отображается, например). Смутило то, что встречаю реализацию логики обработки клика в примерах, причем у нескольких очень авторитетных авторов...
Сколько людей столько и мнений. По мне так адаптер не должен знать того, что должно происходить по нажатии на итем. Его дело ивент запустить, а логика там где этот адаптер создан. Но некоторые так не считают=)