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:

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:

  1. 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 seperti Uri), String, dan Long. Untuk informasi mendetail tentang jenis kunci pemilihan, lihat SelectionTracker.Builder.

  2. Implementasikan ItemDetailsLookup.
  3. 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.

  4. Perbarui item Views di RecyclerView 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:

  5. Gunakan ActionMode untuk memberikan alat kepada pengguna untuk melakukan tindakan atas pilihan.
  6. 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.

  7. Lakukan tindakan sekunder apa pun yang diperlukan
  8. 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.

  9. Rangkai semuanya dengan SelectionTracker.Builder
  10. 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() .

  11. Sertakan pilihan dalam peristiwa siklus proses aktivitas.
  12. 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.