Saya mencoba untuk digunakan dalam saya Android Application
yang notifyDataSetChanged()
metode untuk ArrayAdapter
tetapi tidak bekerja untuk saya.
Saya menemukan jawaban di sini , yang notifyDataSetChanged()
seharusnya berjalan di utas utama, tetapi tidak ada contoh untuk itu.
Adakah yang bisa mengirim contoh atau setidaknya tautan?
Jawaban:
Untuk
ArrayAdapter
,notifyDataSetChanged
hanya bekerja jika Anda menggunakanadd()
,insert()
,remove()
, danclear()
pada Adapter.Ketika sebuah
ArrayAdapter
dibangun, itu memegang referensi untukList
yang disahkan. Jika Anda harus melewatinyaList
yang merupakan anggota dari suatu Kegiatan, dan mengubah anggota Kegiatan itu nanti,ArrayAdapter
ia masih memegang referensi ke yang asliList
. Adaptor tidak tahu Anda mengubahList
dalam Kegiatan.Pilihan Anda adalah:
ArrayAdapter
untuk memodifikasi Daftar mendasari (add()
,insert()
,remove()
,clear()
, dll)ArrayAdapter
denganList
data baru . (Menggunakan banyak sumber daya dan pengumpulan sampah.)BaseAdapter
danListAdapter
yang memungkinkan perubahanList
struktur data yang mendasarinya .notifyDataSetChanged()
setiap kali daftar diperbarui. Untuk menyebutnya di UI-Thread, gunakanrunOnUiThread()
dariActivity
. Lalu,notifyDataSetChanged()
akan berhasil.sumber
notifyDataSetChanged()
dengan cara seperti:((BaseAdapter) arrayAdapter).notifyDataSetChanged();
?Anda dapat menggunakan
runOnUiThread()
metode ini sebagai berikut. Jika Anda tidak menggunakanListActivity
, sesuaikan kode untuk mendapatkan referensiArrayAdapter
.sumber
Baru-baru ini saya menulis tentang topik ini, meskipun posting ini sudah lama, saya pikir itu akan membantu seseorang yang ingin tahu bagaimana menerapkan
BaseAdapter.notifyDataSetChanged()
langkah demi langkah dan dengan cara yang benar.Harap ikuti Bagaimana menerapkan dengan benar BaseAdapter.notifyDataSetChanged () di Android atau blog baru BaseAdapter.notifyDataSetChanged () .
sumber
mItem.add()
, saya hanya melakukan pengeditan satu elemen berarti sepertimItem.get(position).setImage(encodedImage)
itulah mengapa itu memberikan kesalahan NullPointer pengecualian. hanya untuk add (), hapus (), hapus () dllSaya memiliki masalah yang sama dan saya memilih untuk tidak mengganti seluruh ArrayAdapter dengan instance baru secara terus menerus. Jadi saya meminta AdapterHelper melakukan pekerjaan berat di tempat lain.
Tambahkan ini di tempat Anda biasanya (mencoba) menelepon notifikasi
Kelas AdapterHelper
sumber
super.addAll(..)
untuk API> 11 dan super.add (.. ) dalam kombinasi dengan iterasi seperti Anda:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { super.addAll(items); } else { for (Object o : collection) { super.add(o); } }
. Sekarang cukup rentangkan dari kelas adaptor baru Anda.Saya tahu ini adalah respons yang terlambat tetapi saya menghadapi masalah yang sama dan saya berhasil menyelesaikannya dengan menggunakan
notifyDataSetChanged()
di tempat yang tepat.Jadi situasiku adalah sebagai berikut.
Saya harus memperbarui tampilan daftar di tab bilah tindakan (fragmen) dengan konten yang dikembalikan dari aktivitas yang sama sekali berbeda. Namun pada awalnya, listview tidak akan mencerminkan perubahan apa pun. Namun, ketika saya mengklik tab lain dan kemudian kembali ke tab yang diinginkan, tampilan daftar akan diperbarui dengan konten yang benar dari aktivitas lain. Jadi untuk menyelesaikan ini saya gunakan
notifyDataSetChanged()
adaptor action bar dalam kode aktivitas yang harus mengembalikan data.Ini adalah cuplikan kode yang saya gunakan dalam aktivitas.
Aktivitas ini akan mengembalikan beberapa data
FragmentTab2
dan secara langsung akan memperbarui tampilan daftar sayaFragmentTab2
.Semoga seseorang menemukan ini berguna!
sumber