Я заменяю свой ListView
на RecyclerView
, список показывает нормально, но я хотел бы знать, как получить выбранный элемент и его положение, аналогично методу, который OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)
мы используем ListView
.
Спасибо за идеи!
Ответы:
На основе ссылки: Почему в RecyclerView нет onItemClickListener ()? и чем RecyclerView отличается от Listview? , а также общую идею @Duncan, я даю свое решение здесь:
Определите один интерфейс
RecyclerViewClickListener
для передачи сообщения от адаптера кActivity
/Fragment
:В
Activity
/Fragment
реализовать интерфейс, а также передать слушателя адаптеру:В
Adapter
иViewHolder
:После тестирования работает нормально.
[ ОБНОВЛЕНИЕ ]
Поскольку API 22
RecyclerView.ViewHoler.getPosition()
устарел, поэтому вместоgetLayoutPosition()
.источник
private static RecyclerViewClickListener itemListener;
в конструкторе.onBindViewHolder
. Более того, не весь мой элемент списка был доступен для кликов (только часть элемента).new MyRecyclerViewAdapter(context, this)
? Это может вызвать утечку памятиpublic void recyclerViewListClicked(View v, int position);
Модификаторpublic
избыточен для методов интерфейсаисточник
Вот пример установки прослушивателя кликов.
источник
int position = getAdapterPosition();
Поместите этот код там, где вы определяете вид ресайклера в действии.
Затем создайте отдельный класс и поместите этот код:
источник
создать файл java с кодом ниже
и просто используйте прослушиватель вашего объекта RecyclerView.
источник
RecyclerItemClickListener
не является классом Android по умолчанию, вам следует предоставить библиотеку, которую вы используете, или сам класс.Если вам нужно событие Click для recycle-View из активности / фрагмента вместо адаптера, вы также можете использовать следующий короткий путь.
Вы также можете использовать другие длинные способы, такие как интерфейс
источник
источник
Используйте код ниже: -
источник
RecyclerView не предоставляет такого метода.
Чтобы управлять событиями щелчка в RecyclerView, я в конечном итоге реализовал onClickListener в своем адаптере при привязке ViewHolder: в моем ViewHolder я сохраняю ссылку на корневое представление (как вы можете сделать с вашими ImageViews, TextViews и т. Д.) И при привязке viewHolder Я установил на нем тег с информацией, которая мне нужна для обработки щелчка (например, положение) и прослушивателя щелчков
источник
Я тоже столкнулся с той же проблемой.
Я хотел найти позицию выделенного / выбранного элемента в RecyclerView () и выполнить некоторые конкретные операции с этим конкретным элементом.
getAdapterPosition () отлично подходит для подобных вещей. Я нашел этот метод после дня долгих исследований и после того, как попробовал множество других методов.
Вам не нужно использовать никаких дополнительных методов. Просто создайте глобальную переменную с именем «position» и инициализируйте ее с помощью getAdapterPosition () в любом из основных методов адаптера (класса или аналогичного).
Вот краткая документация по этой ссылке .
Рад был помочь. Не стесняйтесь задавать сомнения.
источник
Мое простое решение
Просто разместите или поместите данные, которые вам нужно получить от активности.
Конструктор адаптера:
В действии:
В адаптере onClickLictener в элементе
onBindViewHolder
Теперь всякий раз, когда вы меняете позицию в RecyclerView, она удерживается в держателе (или, возможно, его следует называть Listener)
Надеюсь, это будет полезно
Мой первый пост; P
источник
источник
Попробуй таким образом
Класс адаптера:
}
В вашей деятельности или фрагменте:
Примечание. Реализуйте OnItemClickListener на основе контекста, указанного вами в методах активности или фрагмента и переопределения.
источник
Каждый раз я использую другой подход. Кажется, что люди сохраняют или получают позицию в представлении, а не хранят ссылку на объект, отображаемый ViewHolder.
Вместо этого я использую этот подход и просто сохраняю его в ViewHolder при вызове onBindViewHolder () и устанавливаю ссылку на null в onViewRecycled ().
Каждый раз, когда ViewHolder становится невидимым, он перерабатывается. Так что это не влияет на потребление большой памяти.
источник
Короткое расширение для метода Kotlin
возвращает абсолютное положение всех элементов (а не положение только видимых элементов).
И использование
источник
Используйте getLayoutPosition () в своем Java-методе пользовательского интерфейса. Это вернет выбранную позицию элемента, проверьте все детали на
https://becody.com/get-clicked-item-and-its-position-in-recyclerview/
источник
В конструкторе вы можете установить
onClick
свойство listItem на метод, определенный с одним параметром. У меня есть пример метода, определенный ниже. Метод getAdapterPosition предоставит вам индекс выбранного listItem.Для получения информации о настройке RecyclerView см. Документацию здесь: https://developer.android.com/guide/topics/ui/layout/recyclerview.
источник
источник
После большого количества проб и ошибок я обнаружил, что есть очень простой способ сделать это - создать интерфейс в классе адаптера и реализовать его во фрагменте. Теперь здесь происходит поворот, я создал экземпляр модели представления внутри моей функции переопределения, присутствующей в fragment, теперь вы можете отправлять данные из этой функции в viemodel и оттуда куда угодно.
Я не знаю, является ли этот метод хорошим методом кодирования, но, пожалуйста, дайте мне знать в комментарии, и если кто-то хочет увидеть, дайте мне знать в разделе комментариев, я регулярно открываю поток стека.
источник
Если использовать Котлин
источник
В onViewHolder установите onClickListiner на любое представление, а при боковом щелчке используйте этот код:
Toast.makeText (Drawer_bar.this, «позиция» + позиция, Toast.LENGTH_SHORT) .show ();
Замените
Drawer_Bar
своим именем действия.источник