1 | ||||||||||||||||
В чём разница между обработчиками нажатий RecyclerView через OnItemTouchListener и в адаптере?19.04.2018, 17:00. Показов 2365. Ответов 8
Метки recyclerview (Все метки)
Доброго дня.
Существуют два способа написания обработчика кликов по элементам RecyclerView. Оба без проблем находятся в поисковиках. Итак, способ первый - написание своего RecyclerTouchListener'а с GestureDetector'ом: Кликните здесь для просмотра всего текста
Тогда на RecyclerView можно повесить этот listener: Кликните здесь для просмотра всего текста
Второй способ, можно добавлять listener'ы в адаптере в методах onCreateViewHolder/onBindViewHolder: Кликните здесь для просмотра всего текста
Причём если сделать повесить listener в обоих методах (onBindViewHolder/onCreateViewHolder) останется только тот listener что был повешен в onBindViewHolder т.к. этот метод отрабатывает после onCreateViewHolder. Listener может быть только один и последний замещает предыдущий. Так же в onBindViewHolder'ре у view можно указать Tag/Id что бы потом получать их если listener вешается в onCreateViewHolder. Но это уже детали второго способа. А главное - оба способа работают и не вышибают друг друга - если совместить listener на уровне всего RecyclerView и какой-нибудь из адаптера (OnItemTouchListener отработает раньше чем из onCreateViewHolder/onBindViewHolder). А как правильно (и в чём в итоге разница) не понятно. Какие подводные камни? Может отказаться так что один - это "мейнстрим", "единственно верный способ" а другой - костыль страшный, который ещё выстрелит когда что-нибудь случиться. Кто как делает вообще (и почему), просвятите!
0
|
|
19.04.2018, 17:00 | |
Ответы с готовыми решениями:
8
NullPointerException в адаптере RecyclerView В чем разница между запуском сервера через mysqld_safe и mysql.exe ? Где окажется спутник через 3 года, в чем качественная разница между различными режимами движения? Отслеживание нажатий RecyclerView в диалогом окне |
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
|
|
19.04.2018, 20:04 | 2 |
Я делаю интерфейс и на него вешается клик. В активити/фрагменте.
Или вьюхолдеру дописываю implements onclickListener то есть стандартный интерфейс и вешаю как обычно в адаптере
0
|
19.04.2018, 20:10 [ТС] | 3 |
А, это есть применить интерфейс OnClickListener к Активности/Фрагменту и в методе onClick уже разбираться кто к нам пришёл. И тогда у элементу View надо бы тоже Tag установить что бы в итоге понять какой из элементов был нажат в случае если это не одиночная кнопка и т.д. а элемент какого-нибудь списка. Да, забыл об этом.
И это тоже забыл, где-то мелькал код, надо будет тоже попробовать. В общем да, ещё 2 варианта, выбор всё больше и больше.
0
|
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
|
|
19.04.2018, 20:12 | 4 |
Основной выбор наверное надо делать из личных нужн и предпочтений.
В основном это как правило интерфейс Что бы понять какой элемент был нажат есть метод getAdapterPosition
0
|
20.04.2018, 17:16 [ТС] | 6 | |||||
Хм, так и сделал, что-то не срабатывает:
Кликните здесь для просмотра всего текста
0
|
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
|
|
20.04.2018, 17:19 | 7 |
Забыли установить слушатель view. SetOnClickListener(this)
1
|
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
||||||
20.04.2018, 18:38 | 9 | |||||
0
|
20.04.2018, 18:38 | |
20.04.2018, 18:38 | |
Помогаю со студенческими работами здесь
9
RecyclerView обработка нажатий переход на другую активити В чем разница между [] и * ?
В чем разница между С и С++
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |