Saya terbiasa meletakkan tampilan khusus di dalam file layout seperti yang dijelaskan dalam ListActivity
dokumentasi yang akan ditampilkan ketika tidak ada data . Tampilan ini memiliki id "android:id/empty"
.
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_data" />
Saya bertanya-tanya bagaimana ini bisa dilakukan dengan yang baru RecyclerView
?
setEmptyView()
metode sederhana melawanRecyclerView
...setEmptyView()
juga memiliki kelemahan. Saat memuat data, kami tidak ingin menampilkan tampilan kosongListView
, tetapi ternyata benar. Jadi, kami harus menerapkan beberapa logika. Saat ini saya menggunakan stackoverflow.com/a/48049142/2914140 .Jawaban:
Pada tata letak yang sama di mana didefinisikan
RecyclerView
, tambahkanTextView
:Di
onCreate
atau pada panggilan balik yang sesuai Anda memeriksa apakah dataset yang memberi makan AndaRecyclerView
kosong. Jika dataset kosong, makaRecyclerView
kosong juga. Dalam hal itu, pesan muncul di layar. Jika tidak, ubah visibilitasnya:sumber
Untuk proyek saya, saya membuat solusi ini (
RecyclerView
dengansetEmptyView
metode):Dan Anda harus menggunakannya sebagai ganti
RecyclerView
kelas:dan
sumber
Berikut adalah solusi yang hanya menggunakan adaptor khusus dengan jenis tampilan berbeda untuk situasi kosong.
sumber
getItemCount()
harus oneliner tetapi di sini kita memiliki non-sepeleif
dengan beberapa logika tersembunyi. Logika ini juga muncul dengan canggunggetItemViewType
dan Tuhan tahu di mana lagiSaya menggunakan ViewSwitcher
dalam kode Anda akan memeriksa kursor / dataset dan beralih tampilan.
Anda juga dapat mengatur animasi jika Anda ingin dengan beberapa baris kode
sumber
Karena jawaban Kevin tidak lengkap.
Ini adalah jawaban yang lebih benar jika Anda menggunakan
RecyclerAdapter
'snotifyItemInserted
dannotifyItemRemoved
update dataset. Lihat versi Kotlin yang ditambahkan pengguna lain di bawah.Jawa:
Kotlin
sumber
RVEmptyObserver
Alih-alih menggunakan kustom
RecyclerView
, memperluasAdapterDataObserver
adalah solusi sederhana yang memungkinkan pengaturan kustomView
yang ditampilkan ketika tidak ada item dalam daftar:Contoh penggunaan:
Kelas:
sumber
checkIfEmpty()
dionChanged()
danonItemRangeInserted()
Pada adaptor Anda
getItemViewType
periksa apakah adaptor memiliki 0 elemen dan mengembalikan tipe tampilan yang berbeda jika demikian.Kemudian pada
onCreateViewHolder
pemeriksaan Anda apakah viewType yang Anda kembali sebelumnya dan mengembang tampilan yang berbeda. Dalam hal ini file tata letak dengan TextView ituEDIT
Jika ini masih tidak berfungsi maka Anda mungkin ingin mengatur ukuran tampilan secara terprogram seperti ini:
Dan kemudian ketika Anda mengembang panggilan panggilan Anda:
sumber
onCreateViewHolder
ketika dataset sayanull
atau mengosongkan karena saya harus kembali0
digetItemCount
.android:layout_gravity="center"
danandroid:layout_height="match_parent"
untuk tampilan pendaur ulang induk.android:layout_height="match_parent"
. Padahal deretan layar tidak memanjang setinggi.Ini adalah kelas saya untuk tampilan kosong, coba lagi tampilan (ketika memuat api gagal) dan memuat kemajuan untuk
RecyclerView
activity_xml
Sumbernya ada di sini https://github.com/PhanVanLinh/AndroidRecyclerViewWithLoadingEmptyAndRetry
sumber
Gunakan AdapterDataObserver di RecyclerView kustom
Kotlin:
RecyclerViewEnum.kt
RecyclerViewEmptyLoadingSupport.kt
layout.xml
dalam aktivitas gunakan cara ini:
sumber
StringDef
atauIntDef
anotasiSaya menambahkan
RecyclerView
dan alternatifImageView
untukRelativeLayout
:dan kemudian di
Adapter
:sumber
mRecyclerView
di dalamAdapter
Satu cara lagi adalah menggunakan
addOnChildAttachStateChangeListener
yang menangani tampilan anak yang muncul / menghilangRecyclerView
.sumber
Jika Anda bekerja dengan FirebaseRecyclerAdapter posting ini berfungsi sebagai pesona https://stackoverflow.com/a/39058636/6507009
sumber