Penyesuaian RecyclerView lanjutan Bagian dari Android Jetpack.
Anda dapat menyesuaikan objek RecyclerView
untuk
memenuhi kebutuhan spesifik Anda. Kelas standar yang dijelaskan dalam
Membuat daftar dinamis dengan
RecyclerView menyediakan semua fungsi
yang akan diperlukan oleh sebagian besar developer; dalam banyak kasus, satu-satunya penyesuaian yang perlu Anda
lakukan adalah mendesain tampilan untuk setiap penampung tampilan dan menulis kode untuk memperbarui
tampilan tersebut dengan data yang sesuai. Namun, jika aplikasi Anda memiliki persyaratan
khusus, Anda dapat mengubah perilaku standar ini melalui beberapa cara. Halaman ini
menjelaskan beberapa kemungkinan penyesuaian lainnya.
Mengubah tata letak
RecyclerView
menggunakan pengelola tata letak untuk
menempatkan item tertentu di layar dan menentukan kapan tampilan item yang tidak
lagi terlihat oleh pengguna akan digunakan kembali. Untuk menggunakan kembali (atau mendaur ulang) tampilan, pengelola tata letak dapat meminta
adaptor untuk mengganti konten tampilan dengan elemen lain dari set data. Mendaur ulang
tampilan semacam ini meningkatkan performa dengan menghindari pembuatan tampilan yang tidak perlu atau
melakukan pencarian findViewById()
yang menghabiskan banyak resource. Android Support Library
menyertakan tiga pengelola tata letak standar, yang masing-masing menawarkan banyak opsi
penyesuaian:
LinearLayoutManager
menyusun item dalam daftar satu dimensi. PenggunaanRecyclerView
denganLinearLayoutManager
menyediakan fungsi seperti tata letakListView
lama.GridLayoutManager
menyusun item dalam petak dua dimensi, seperti persegi di papan catur. PenggunaanRecyclerView
denganGridLayoutManager
menyediakan fungsi seperti tata letakGridView
lama.StaggeredGridLayoutManager
menyusun item dalam petak dua dimensi, di mana setiap kolom sedikit di-offset dari kolom sebelumnya, seperti bintang dalam bendera Amerika.
Jika semua pengelola tata letak ini tidak sesuai dengan kebutuhan Anda, Anda dapat membuatnya sendiri dengan
memperluas
class abstrak RecyclerView.LayoutManager
.
Menambahkan animasi item
Setiap kali item berubah, RecyclerView
akan menggunakan animator untuk mengubah penampilannya. Animator ini adalah objek yang
memperluas class RecyclerView.ItemAnimator
abstrak. Secara default,
RecyclerView
menggunakan DefaultItemAnimator
untuk
menyediakan animasi. Jika ingin memberikan animasi kustom, Anda dapat menentukan
objek animator sendiri dengan memperluas RecyclerView.ItemAnimator
.
Mengaktifkan pilihan item daftar
Library
recyclerview-selection
memungkinkan pengguna memilih item dalam
daftar RecyclerView
melalui input sentuh atau mouse.
Anda mempertahankan kontrol atas presentasi visual item yang dipilih. Anda
juga dapat mempertahankan kontrol atas kebijakan yang mengendalikan perilaku pemilihan, seperti
item yang memenuhi syarat untuk dipilih, dan banyaknya item yang dapat dipilih.
Untuk menambahkan dukungan pemilihan ke instance RecyclerView
,
ikuti langkah-langkah berikut:
- Tentukan jenis kunci pemilihan yang akan digunakan, lalu buat
ItemKeyProvider
.Ada tiga jenis kunci yang dapat Anda gunakan untuk mengidentifikasi item yang dipilih:
Parcelable
(dan semua subclass sepertiUri
),String
, danLong
. Untuk informasi mendetail tentang jenis kunci pemilihan, lihatSelectionTracker.Builder
. - Implementasikan
ItemDetailsLookup
. - Perbarui item
Views
diRecyclerView
untuk menunjukkan bahwa pengguna telah memilih atau batal memilih item tersebut.Library pemilihan tidak menyediakan dekorasi visual default untuk item yang dipilih. Anda harus menyediakannya saat mengimplementasikan
onBindViewHolder()
. Pendekatan yang direkomendasikan adalah sebagai berikut:- Di
onBindViewHolder()
, panggilsetActivated()
(bukansetSelected()
) pada objekView
dengantrue
ataufalse
(tergantung pada apakah item dipilih). - Perbarui gaya tampilan untuk menunjukkan status yang diaktifkan. Sebaiknya gunakan resource daftar status warna untuk mengonfigurasi gaya.
- Di
- Gunakan
ActionMode
untuk memberikan alat kepada pengguna untuk melakukan tindakan atas pilihan. - Lakukan tindakan sekunder apa pun yang diperlukan
- Rangkai semuanya dengan
SelectionTracker.Builder
- Sertakan pilihan dalam peristiwa siklus proses aktivitas.
ItemDetailsLookup
mengaktifkan library pemilihan untuk mengakses informasi tentang item
RecyclerView
dengan memperhitungkan
MotionEvent
.
Secara efektif, ini adalah factory untuk instance
ItemDetails
yang ditunjang oleh (atau diekstrak dari)
instance RecyclerView.ViewHolder
.
Daftarkan SelectionTracker.SelectionObserver
untuk menerima pemberitahuan saat pilihan berubah. Saat pilihan dibuat untuk pertama kalinya,
jalankan ActionMode
untuk menunjukkan ini kepada
pengguna, dan menyediakan tindakan untuk pilihan tertentu. Misalnya, Anda dapat menambahkan
tombol hapus ke panel ActionMode
, dan
menghubungkan panah mundur di panel tersebut untuk menghapus pilihan. Setelah pilihan
kosong (karena dihapus oleh pengguna), jangan
lupa untuk menghentikan mode tindakan.
Di akhir pipeline pemrosesan peristiwa, library ini dapat menentukan bahwa
pengguna mencoba mengaktifkan item dengan mengetuknya, atau mencoba
menarik dan melepas sebuah atau serangkaian item yang dipilih. Respons interpretasi
ini dengan mendaftarkan pemroses yang sesuai. Untuk informasi
selengkapnya, lihat
SelectionTracker.Builder
.
Contoh berikut menunjukkan cara menyatukan langkah-langkah di atas menggunakan
kunci pemilihan Long
:
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
Untuk membuat instance
SelectionTracker
,
aplikasi Anda harus menyediakan
RecyclerView.Adapter
yang sama dengan yang Anda gunakan untuk
menginisialisasi RecyclerView
ke
SelectionTracker.Builder
.
Karena alasan ini, Anda mungkin perlu memasukkan
instance SelectionTracker
,
setelah dibuat, ke dalam
RecyclerView.Adapter
setelah
RecyclerView.Adapter
dibuat.
Jika tidak, Anda tidak akan dapat memeriksa status item yang dipilih dari
metode
onBindViewHolder()
.
Agar status pemilihan bertahan di sepanjang
peristiwa siklus proses aktivitas,
aplikasi Anda harus memanggil metode
onSaveInstanceState()
dan
onRestoreInstanceState()
di pelacak pilihan dari metode
onSaveInstanceState()
dan
onRestoreInstanceState()
aktivitas. Aplikasi Anda juga harus memasukkan ID pemilihan unik ke konstruktor
SelectionTracker.Builder
.
ID ini diperlukan karena sebuah aktivitas atau fragmen dapat memiliki
lebih dari satu daftar unik yang dapat dipilih, yang semuanya harus dipertahankan
dalam status tersimpannya.
Referensi lainnya
RecyclerView
digunakan
di aplikasi demo Sunflower.