Saya mengganti saya ListView
dengan RecyclerView
, daftar menunjukkan ok, tapi saya ingin tahu bagaimana cara mendapatkan item yang diklik dan posisinya, mirip dengan metode yang OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)
kita gunakan ListView
.
Terima kasih atas idenya!
Jawaban:
Berdasarkan tautan: Mengapa RecyclerView tidak memiliki onItemClickListener ()? dan Bagaimana RecyclerView berbeda dari Listview? , dan juga ide umum @ Duncan, saya berikan solusinya di sini:
Tentukan satu antarmuka
RecyclerViewClickListener
untuk meneruskan pesan dari adaptor keActivity
/Fragment
:Di
Activity
/Fragment
implementasikan antarmuka, dan juga teruskan listener ke adaptor:Dalam
Adapter
danViewHolder
:Setelah pengujian, ini berfungsi dengan baik.
[ UPDATE ]
Sejak API 22,
RecyclerView.ViewHoler.getPosition()
tidak digunakan lagi, jadi dengangetLayoutPosition()
.sumber
private static RecyclerViewClickListener itemListener;
dengan cara statis di konstruktor.onBindViewHolder
. Selain itu, item daftar saya tidak semuanya dapat diklik (hanya sebagian dari item tersebut).new MyRecyclerViewAdapter(context, this)
? Ini dapat menyebabkan kebocoran memoripublic void recyclerViewListClicked(View v, int position);
Pengubahpublic
adalah redundan untuk metode antarmukasumber
Berikut adalah Contoh untuk menyetel Pemroses Klik.
sumber
int position = getAdapterPosition();
Letakkan kode ini di tempat Anda mendefinisikan tampilan pendaur ulang dalam aktivitas.
Kemudian buat kelas terpisah dan masukkan kode ini:
sumber
buat file java dengan kode di bawah ini
dan cukup gunakan pendengar pada objek RecyclerView Anda.
sumber
RecyclerItemClickListener
bukan kelas android default, Anda harus menyediakan perpustakaan yang Anda gunakan atau kelas itu sendiri.Jika Anda menginginkan event Click of recycle-View dari activity / fragment dan bukan dari adaptor maka Anda juga bisa menggunakan cara pintas berikut ini.
Anda juga dapat menggunakan cara lama lainnya seperti menggunakan antarmuka
sumber
sumber
Gunakan kode di bawah ini: -
sumber
RecyclerView tidak menyediakan metode seperti itu.
Untuk mengelola kejadian klik di RecyclerView, saya akhirnya mengimplementasikan onClickListener di adaptor saya, saat mengikat ViewHolder: Di ViewHolder saya, saya menyimpan referensi ke tampilan root (seperti yang dapat Anda lakukan dengan ImageView, TextView, dll ...) dan saat mengikat viewHolder Saya menetapkan tag di atasnya dengan informasi yang saya perlukan untuk menangani klik (seperti posisi) dan clicklistener
sumber
Saya juga menghadapi masalah yang sama.
Saya ingin menemukan posisi item yang diklik / dipilih dari RecyclerView () dan melakukan beberapa operasi spesifik pada item tersebut.
Metode getAdapterPosition () bekerja seperti pesona untuk hal-hal semacam ini. Saya menemukan metode ini setelah seharian melakukan penelitian yang panjang dan setelah mencoba berbagai metode lainnya.
Anda tidak perlu menggunakan metode tambahan apa pun. Cukup buat variabel global bernama 'position' dan inisialisasi dengan getAdapterPosition () di salah satu metode utama adaptor (kelas atau serupa).
Berikut adalah dokumentasi singkat dari tautan ini .
Saya senang bisa membantu. Jangan ragu untuk menanyakan keraguan.
sumber
Solusi sederhana saya
Cukup letakkan atau letakkan data yang perlu Anda peroleh dari aktivitas.
Konstruktor adaptor:
Dalam Aktivitas:
Di Adapter onClickLictener pada item
di onBindViewHolder
Sekarang setiap kali Anda mengubah posisi di RecyclerView, itu ditahan di Holder (atau mungkin harus disebut Listener)
Semoga bermanfaat
Posting pertama saya; P
sumber
sumber
Coba dengan cara ini
Kelas adaptor:
}
Dalam Aktivitas atau fragmen Anda:
Catatan: Implementasikan OnItemClickListener berdasarkan konteks yang Anda berikan dalam aktivitas atau metode fragmen dan overide.
sumber
Setiap kali saya menggunakan pendekatan lain. Orang-orang tampaknya menyimpan atau mendapatkan posisi pada tampilan, daripada menyimpan referensi ke objek yang ditampilkan oleh ViewHolder.
Saya menggunakan pendekatan ini sebagai gantinya, dan hanya menyimpannya di ViewHolder ketika onBindViewHolder () dipanggil, dan menetapkan referensi ke null di onViewRecycled ().
Setiap kali ViewHolder menjadi tidak terlihat, itu didaur ulang. Jadi ini tidak berpengaruh pada konsumsi memori yang besar.
sumber
Ekstensi singkat untuk Metode Kotlin
mengembalikan posisi absolut semua item (bukan posisi hanya item yang terlihat).
Dan penggunaan
sumber
Gunakan getLayoutPosition () dalam metode java antarmuka kustom Anda. Ini akan mengembalikan posisi item yang dipilih, periksa detail lengkapnya
https://becody.com/get-clicked-item-and-its-position-in-recyclerview/
sumber
Dari desainer, Anda dapat menyetel
onClick
properti listItem ke metode yang ditentukan dengan parameter tunggal. Saya memiliki metode contoh yang ditentukan di bawah ini. Metode getAdapterPosition akan memberi Anda indeks listItem yang dipilih.Untuk informasi tentang menyiapkan RecyclerView, lihat dokumentasinya di sini: https://developer.android.com/guide/topics/ui/layout/recyclerview
sumber
sumber
Setelah banyak trial and error saya menemukan bahwa ada cara yang sangat mudah untuk melakukan ini yaitu dengan membuat interface di kelas adaptor dan mengimplementasikannya dalam fragment sekarang inilah twistnya, saya instansiated model tampilan di dalam fungsi override saya yang ada di fragment sekarang Anda dapat mengirim data dari fungsi itu ke viemodel dan dari sana ke mana saja.
Saya tidak tahu apakah metode ini adalah metode pengkodean yang baik tetapi tolong beri tahu saya di komentar dan jika ada yang ingin melihat beri tahu saya di bagian komentar, saya secara teratur membuka aliran stackover.
sumber
Jika menggunakan Kotlin
sumber
Di onViewHolder, setel onClickListiner ke tampilan mana pun dan di klik samping gunakan kode ini:
Toast.makeText (Drawer_bar.this, "posisi" + posisi, Toast.LENGTH_SHORT) .show ();
Ganti
Drawer_Bar
dengan nama Aktivitas Anda.sumber