Android Docs mengatakan:
Widget RecyclerView adalah versi ListView yang lebih canggih dan fleksibel. Widget ini adalah wadah untuk menampilkan set data besar yang dapat digulir dengan sangat efisien dengan mempertahankan jumlah tampilan yang terbatas. Gunakan widget RecyclerView ketika Anda memiliki koleksi data yang elemennya berubah saat runtime berdasarkan tindakan pengguna atau peristiwa jaringan
Sebenarnya ListView
bisa melakukan semua hal di atas jika efisiensi tidak masalah, dan kami telah menemukan banyak masalah ketika kami gunakan RecyclerView
untuk mengganti ListView
:
Tidak ada onItemClickListener () untuk pemilihan item daftar - solusi
Tidak ada pembagi antara item daftar - solusi
Tidak ada pemilih tumpang tindih bawaan, tidak ada umpan balik visual ketika Anda mengklik item daftar - solusi
Tidak ada addHeaderView untuk daftar tajuk - solusi
Mungkin lebih banyak masalah ...
Jadi ketika kita gunakan RecyclerView
untuk mengganti ListView
, kita harus melakukan banyak pengkodean tambahan untuk mencapai efek yang sama dengan ListView
.
PERTANYAAN:
- Apakah layak kita ganti
ListView
denganRecyclerView
benar?- jika tidak maka dalam hal ini harus lebih baik kita menggunakan
RecyclerView
bukanListView
, dan sebaliknya?
sumber
Jawaban:
Jika ListView berfungsi untuk Anda, tidak ada alasan untuk bermigrasi. Jika Anda menulis UI baru, Anda mungkin lebih baik dengan RecyclerView.
RecyclerView sangat kuat ketika Anda perlu menyesuaikan daftar Anda atau Anda ingin animasi yang lebih baik. Metode kenyamanan di ListView menyebabkan banyak masalah bagi orang-orang yang mengapa RecyclerView memberikan solusi yang lebih fleksibel kepada mereka.
Perubahan besar yang perlu Anda lakukan untuk migrasi ada di adaptor Anda. Jika Anda ingin terus menelepon
notifyDataSetChanged
, Anda kehilangan sebagian besar manfaat animasi & mengikat. Tetapi jika Anda dapat mengubah adaptor Anda untuk mengirimkan acara pemberitahuan terperinci (ditambahkan / dihapus / dipindahkan / diperbarui), maka Anda mendapatkan animasi dan kinerja yang jauh lebih baik. Acara ini memungkinkan RecyclerView memilih animasi yang tepat dan juga membantu menghindarionBind
panggilan yang tidak perlu . Anda akan mendapat manfaat besar jika tampilan item Anda kompleks. Selain itu, ke depan, akan ada lebih banyak komponen di sekitar RecyclerView.sumber
notifyDataSetChanged()
Metode menyebabkan sayaRecyclerView
terus meminta baruViewHolders
sepanjang waktu, mengeruk manfaat dariViewHolder
pola. Mencari solusi saya menemukan komentar Anda yang menjawab masalah saya cukup banyak lewat: D terima kasih!isRecyclable(false);
dan hasil akhirnya RecyclerView sangat lamban. Aku bahkan tidak bisa mengubah ini, akan butuh banyak waktu untuk kembali ke listview :(findViewById()
jauh lebih mahal daripada melakukannya denganViewHolder
cara itu.Menurut saya, jika ListView memenuhi semua kebutuhan aplikasi Anda saat ini dan memenuhi semua kasus penggunaan, maka tidak perlu menggantinya dengan RecyclerView.
RecyclerView memberi kekuatan besar kepada pengembangnya dengan biaya meningkatkan kompleksitas bagi pengembang. Ada hal-hal tertentu yang dapat dilakukan dengan mudah di ListView sekarang dapat mengambil banyak upaya yang tidak perlu.
Tapi ya, ada banyak hal yang tidak bisa dilakukan ListView, seperti fitur LayoutManager yang luar biasa yang dapat memungkinkan Anda untuk mengubah tata letak secara dinamis menjadi horizontal, vertikal, kisi, atau kisi yang terhuyung-huyung dengan mulus.
Saya menulis jawaban terperinci tentang topik ini di sini .
sumber
1 Anda dapat menggunakan antarmuka untuk menyediakan pendengar klik. Saya menggunakan teknik ini dengan ListViews juga.
2 Tanpa pembagi: Cukup tambahkan di baris Anda Tampilan dengan lebar match_parent dan tinggi 1dp dan beri warna latar belakang .
3 Cukup gunakan pemilih StateList untuk latar belakang baris.
4 addHeaderView juga dapat dihindari di ListViews: cukup letakkan Header di luar View.
Jadi, jika efisiensi menjadi perhatian Anda, maka ya , itu ide yang baik untuk mengganti ListView dengan RecyclerView.
sumber
Saya sampai saat ini masih menggunakan ListView untuk daftar yang sangat sederhana. Misalnya jika saya ingin menampilkan daftar opsi teks sederhana ...
Saya mendasarkan keputusan itu pada 'faktor manusia', bahwa membuat ListView sederhana dengan kode lebih sedikit lebih baik jika kinerjanya tidak material. Saya sering berpikir tentang seorang profesor di perguruan tinggi yang gemar mengatakan: "Guru saya Niclaus Wirth yang hebat, penemu Pascal, dulu mengatakan jika suatu program memiliki lebih dari 50 baris kode, pasti salah ..."
Tetapi yang meyakinkan saya untuk berhenti menggunakan ListView adalah bahwa ia baru saja dipindahkan ke kategori "Legacy" di alat desain Android Studio bersama dengan RelativeLayout.
Saya pikir ini adalah bentuk 'penghinaan' yang lunak. Akan terlalu mengganggu jika itu benar-benar usang dan semua pengembang yang teliti memindahkan kode mereka ke RecyclerView.
Lebih lanjut, pengantar ListView memperingatkan tepat di atas bahwa RecyclerView adalah pilihan yang lebih baik: "Untuk pendekatan yang lebih modern, fleksibel, dan berkinerja untuk menampilkan daftar, gunakan RecyclerView."
https://developer.android.com/reference/android/widget/ListView
Juga, panduan untuk ListView masih berbicara tentang pemuat kursor, tetapi kemudian getSupportCursorLoader () itu sendiri baru saja ditinggalkan di API 28.
https://developer.android.com/guide/topics/ui/layout/listview
Perangkat tambahan terbaru untuk Android Studio:
Ini memberi kami RecylerView yang berfungsi penuh yang diisi dengan teks dasar. Itu menghilangkan alasan terakhir saya yang sebenarnya untuk menggunakan ListView karena sekarang sama mudahnya membuat RecylerView dasar.
Singkatnya, saya tidak bermaksud menggunakan ListView sama sekali untuk pengembangan baru karena pelabelan itu memiliki 'warisan' adalah satu langkah lagi dari mencela itu.
sumber
Satu-satunya kasus ketika masih baik untuk menggunakan ListView adalah ketika daftar tidak dinamis atau dipengaruhi oleh kejadian jaringan. Misalnya: navigasi.
Untuk kegunaan lain, RecyclerView gerhana ListView. Karena RecyclerView hanya peduli tentang daur ulang, akan lebih mudah untuk melakukan hal-hal terkait visual yang tergabung erat dalam ListView, seperti mengubah posisi / penataan ulang, animasi (sebenarnya ia datang dengan RecyclerView.ItemAnimator), tata letak khusus (stok memiliki StaggeredGrid di samping daftar lama atau gaya kotak tetapi ada juga pustaka ini yang lebih luas).
Juga jika Anda ingin menggunakan CardView, saya percaya ini satu-satunya cara untuk pergi ( membaca dengan baik kapan harus menggunakan kartu atau daftar).
sumber
Alternatif yang bagus menggunakan BaseAdapter. Ini mendukung pola penggunaan Viewholder dan tambang berisi 100 baris dengan bitmap dan tombol dan berjalan sangat lancar.
sumber