Tips RecyclerView – Frequently Asked Question – Ketika kamu membuat sebuah Aplikasi, pasti tidak akan lepas yang namanya mengelola data. Lalu bagaimana jadinya jika Aplikasimu butuh menampilkan data dalam jumlah banyak ke layar? Mungkin kamu akan bingung memilih antara memakai ListView atau RecyclerView. Namun semenjak Google meluncurkan pendekatan Material Design, RecyclerView menjadi pilihan pertama yang harus digunakan. Penjelasan dan tutorial lengkap mengenai ini dapat dilihat di Belajar Membuat Aplikasi Android untuk Pemula. Jangan ragu, kelas tersebut gratis dan penjelasannya sangat mudah dipahami. Just check it out!
Di sini, kita akan membahas mengenai beberapa pertanyaan yang sering diajukan mengenai RecyclerView. Pertanyaan-pertanyaan ini memiliki votes paling banyak bagi para coder. Terpilihlah beberapa untuk dirangkum dan akan dibahas dalam bahasa Indonesia. Penasaran? Yuk cermati, siapa tau kamu pernah mengalami permasalahan yang sama.
💻 Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar SekarangPerbedaan RecyclerView dengan ListView
Sesuai dengan namanya, RecyclerView benar-benar bisa mendaur ulang item yang sedang ditampilkan dengan menggunakan ViewHolder.ViewHolder dalam RecyclerView merupakan suatu kewajiban. Sedangkan dalam ListView, penggunaan ViewHolder hanya berupa saran, tanpa ada paksaan untuk memakainya. Hal ini tentunya sangat melebihkan RecyclerView dalam hal performa. RecyclerView dapat memisahkan list dari wadahnya dengan mudah menggunakan LayoutManager. Kita diberikan kemudahan untuk menyesuaikan tampilan dengan design yang kita inginkan, yaitu dengan:
- LinearLayoutManager yang mendukung tampilan list secara vertikal dan horizontal,
- StaggeredLayoutManager yang memberikan tampilan seperti pada Pinterest, dan
- GridLayoutManager yang menampilkan Grid seperti pada aplikasi Gallery.
Selain itu kita dapat membuat manager kita sendiri dengan beberapa kustomisasi. Terdapat juga ItemAnimator yang dapat digunakan untuk animasi yang berbeda-beda: menambahkan, memperbarui, dan menghapus data. Lagi-lagi, RecyclerView memiliki kelebihan dalam hal fleksibilitas.
ListView |
RecyclerView |
ViewHolder tidak wajib | ViewHolder wajib |
Tampilan list di-design untuk vertikal | Tampilan list dapat secara vertikal, horizontal, grid, dan straggered |
Tidak terdapat ItemAnimator secara default | Terdapat ItemAnimator untuk menambah, memperbarui, dan menghapus item |
Terdapat OnItemClickListener | OnItemClickListener harus dibuat sendiri |
Default adapters | Custom adapters |
Lebih simpel | Lebih kompleks |
Memang banyak kelebihan dibanding ListView, namun penggunaannya menjadi lebih kompleks dan agak susah dipahami. Bagaimanapun, ListView lebih simple dan mudah dipelajari karena kita tidak perlu berurusan dengan LayoutManager, ItemAnimator, dan OnClickListener. Loh, onClickListener? Yap, banyak juga yang bertanya mengapa tidak memiliki onClickListener seperti ListView. Kita bahas di poin selanjutnya, yuk!
Kenapa RecyclerView tidak memiliki OnClickListener()?
Sejak ListView dikenalkan, onItemClickListener() miliknya sudah memiliki masalah. Hal ini disebabkan karena tidak ada notifikasi maupun pendokumentasian yang baik mengenai apa yang sedang terjadi ketika ada callback yang tidak terpicu pada saat salah satu item ditekan. Oleh karena itu, banyak terjadi kebingungan dan pertanyaan mengenai OnItemClickListener() pada ListView.
Contoh pada ListView ketika ingin melakukan klik pada item :
1 2 3 4 5 6 |
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this, dataName[i], Toast.LENGTH_SHORT).show(); } }); |
Sedangkan di RecyclerView tidak support fitur itu.
RecyclerView sendiri mengambil langkah yang lebih maju dengan tidak menggunakan konsep baris atau kolom, melainkan menata anak-anaknya ke dalam ViewHolder lalu memberikan OnClick kepadanya atau dengan memberikan kuasa kepada developer untuk mengimplementasikan OnClick buatannya. Well, ada beberapa cara untuk mengimplementasikan OnClick sebagai contohnya dengan menambahkan onClickListener() pada RecyclerView.Adapter :
Dalam modul Android Pemula dan Menjadi Android Developer Expert Dicoding, terdapat juga tutorial untuk membuat RecyclerView listener.
E/RecyclerView﹕ No adapter attached; skipping layout
“Loh loh, kok bisa? Perasaan tadi RecyclerView-nya udah kukasih adapter…”
Pernah mengalami hal yang sama? Coba cek beberapa hal ini dari yang kamu buat :
1 2 3 4 5 |
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists); recyclerView = (RecyclerView) findViewById(R.id.cardList); recyclerView.setHasFixedSize(true); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); |
- Apakah kamu memanggil statement itu dari main thread (contoh : onCreate())? Coba cek lagi.
- Jangan lupa mememanggil setLayoutManager()
- Pastikan getItemCount() memiliki kode yang benar. Pada dasarnya RecyclerView.Adapter akan menghasilkan method getItemCount() yang akan mengembalikan nilai 0. Apabila tidak diubah, maka jumlah item yang dihitung akan tetap 0 sehingga tidak ada data yang dapat ditampilkan ke layar.
Dividers between item
Untuk memberikan garis pembatas antara item satu dengan item lainnya cukup mudah, yaitu dengan addItemDecoration. itemDecoration adalah kelas abstrak yang difasilitasi oleh android.support.v7.widget untuk memberikan garis di antara item, memberikan highlights, atau untuk mengelompokkan suatu grup ke dalam list secara visual. Sejak API 25.5.0, kita dapat menggunakan ItemDecoration DividerItemDecoration untuk memberikan garis vertikal atau horizontal di antara item dalam LinearLayoutManagers.
1 2 3 4 |
recyclerView.addItemDecoration (new DividerItemDecoration (getContext(), DividerItemDecoration.VERTICAL) ); |
Selain itu, kita juga dapat mengganti orientasi layar dengan itemDecoration.setOrientaion({VERTICAL/HORIZONTAL}). Mau mengganti warna garis atau membuatnya sendiri? Gunakan drawable dengan itemDecor.setDrawable(Drawable divider). Contoh untuk mengganti warna dan tebal garis :
1 2 |
DividerItemDecoration itemDecorator = new DividerItemDecoration (getContext(), DividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(getContext(), R.drawable.divider)); |
Contoh file divider.xml :
1 2 3 4 5 6 |
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/colorPrimary"/> <size android:height="0.5dp"/> </shape> |
Well done. Semoga sedikit materi di atas memberikan sedikit insight. Semoga bermanfaat. Jangan lupa like, comment, and share! See you on another post!
Penjelasan dan tutorial lengkap mengenai RecyclerView dapat diakses dengan mendaftar kelas di Belajar Membuat Aplikasi Android untuk Pemula
Simak juga tips lain mengenai coding dan android di:
“Guideline ngoding di Android Studio” https://www.dicoding.com/blog/guideline-ngoding-di-android-studio/
“Android Studio: Aplikasi Error! Apa yang harus dilakukan?” https://www.dicoding.com/blog/android-studio-aplikasi-error-apa-yang-harus-dilakukan/
“Tips Bertanya Coding dengan Baik” https://www.dicoding.com/blog/tips-bertanya-coding-baik/