Baru diimplementasikan RecyclerView
dalam kode saya, ganti ListView
.
Semuanya bekerja dengan baik. Data ditampilkan.
Tetapi pesan kesalahan sedang dicatat:
15:25:53.476 E/RecyclerView: No adapter attached; skipping layout
15:25:53.655 E/RecyclerView: No adapter attached; skipping layout
untuk kode berikut:
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Seperti yang Anda lihat, saya telah memasang adaptor untuk RecyclerView
. Jadi mengapa saya terus mendapatkan kesalahan ini?
Saya telah membaca pertanyaan lain yang berhubungan dengan masalah yang sama tetapi tidak ada yang membantu.
android
android-recyclerview
recycler-adapter
equitharn
sumber
sumber
Jawaban:
Bisakah Anda memastikan bahwa Anda memanggil pernyataan ini dari utas "utama" (misalnya di dalam
onCreate()
metode). Segera setelah saya memanggil pernyataan yang sama dari metode "tertunda". Dalam kasus sayaResultCallback
, saya mendapatkan pesan yang sama.Di saya
Fragment
, memanggil kode di bawah ini dari dalam suatuResultCallback
metode menghasilkan pesan yang sama. Setelah memindahkan kode keonConnected()
metode dalam aplikasi saya, pesan itu hilang ...sumber
Saya mendapatkan dua pesan kesalahan yang sama sampai saya memperbaiki dua hal dalam kode saya:
(1) Secara default, ketika Anda mengimplementasikan metode di
RecyclerView.Adapter
dalamnya menghasilkan:Pastikan Anda memperbarui kode Anda sehingga dikatakan:
Tentunya jika Anda memiliki item nol di item Anda maka Anda akan mendapatkan nol hal yang ditampilkan di layar.
(2) Saya tidak melakukan ini seperti yang ditunjukkan pada jawaban atas: CardView layout_width = "match_parent" tidak cocok dengan lebar induk RecyclerView
(3) EDIT: BONUS: Pastikan juga Anda mengatur
RecyclerView
seperti ini:Tidak seperti ini:
Saya telah melihat beberapa tutorial menggunakan metode yang terakhir. Sementara itu berfungsi saya pikir ini menghasilkan kesalahan ini juga.
sumber
public int getItemCount() { return artists == null ? 0 : artists.size(); }
dan LayoutInflaterView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
Saya memiliki situasi yang sama dengan Anda, tampilan ok, tetapi kesalahan muncul di locat. Itu solusi saya: (1) Inisialisasi RecyclerView & bind adapter ON CREATE ()
(2) panggil notifyDataStateChanged ketika Anda mendapatkan data
Dalam kode sumber recyclerView, ada utas lain untuk memeriksa status data.
Di dispatchLayout (), kami dapat menemukan ada kesalahan di dalamnya:
sumber
saya punya masalah ini, beberapa kali masalah adalah recycleView dimasukkan ke dalam objek ScrollView
Setelah memeriksa implementasi, alasannya muncul sebagai berikut. Jika RecyclerView dimasukkan ke dalam ScrollView, maka selama langkah pengukuran tingginya tidak ditentukan (karena ScrollView memungkinkan ketinggian apa pun) dan, akibatnya, mendapatkan sama dengan tinggi minimum (sesuai implementasi) yang ternyata nol.
Anda memiliki beberapa opsi untuk memperbaikinya:
(Dapat diikuti
android.support.v4.widget.NestedScrollView
juga)sumber
1) Buat ViewHolder yang tidak melakukan apa-apa :)
2) Sekali lagi buat RecyclerView yang tidak melakukan apa-apa :)
3) Sekarang ketika pendaur ulang nyata Anda belum siap, gunakan sampel yang seperti di bawah ini.
Meskipun ini bukan solusi terbaik tetapi berhasil! Semoga ini bisa membantu.
sumber
Ini terjadi ketika Anda tidak mengatur adaptor selama fase pembuatan:
Cukup pindahkan pengaturan adaptor ke onCreate dengan data kosong dan ketika Anda memiliki panggilan data:
sumber
Periksa apakah Anda tidak dapat memanggil metode ini di adaptor Anda
sumber
Pastikan Anda mengatur manajer tata letak untuk RecyclerView Anda dengan:
Alih-alih
LinearLayoutManager
, Anda juga dapat menggunakan pengelola tata letak lainnya .sumber
Saya memiliki kesalahan yang sama dengan saya memperbaikinya dengan melakukan ini jika Anda menunggu data seperti saya menggunakan retrofit atau sesuatu seperti itu
Letakkan di depan Oncreate
Tempatkan mereka di Oncreate Anda
Ketika Anda menerima data put
Sekarang masuklah ke kelas ArtistArrayAdapter Anda dan lakukan ini apa yang akan dilakukannya adalah jika array Anda kosong atau null akan membuat GetItemCount mengembalikan 0 jika tidak, itu akan membuat ukuran array artis
sumber
Baris ini harus dalam
OnCreate
:sumber
Ini terjadi karena tata letak yang sebenarnya meningkat berbeda dari yang sedang Anda rujuk saat menemukan recyclerView. Secara default saat Anda membuat fragmen, metode onCreateView muncul sebagai berikut:
return inflater.inflate(R.layout.<related layout>,container.false);
Alih-alih itu, buat secara terpisah tampilan dan gunakan itu untuk merujuk ke recyclerView
View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;
sumber
Pertama-tama inisialisasi adaptor
Ketika ada perubahan dalam set dataset, panggil saja metode updateComments.
sumber
Bagi mereka yang menggunakan bagian
RecyclerView
dalam fragmen dan mengembangnya dari tampilan lain: ketika menggembungkan seluruh tampilan fragmen, pastikan bahwa Anda mengikatnyaRecyclerView
ke tampilan root.Saya menghubungkan dan melakukan segalanya untuk adaptor dengan benar, tetapi saya tidak pernah melakukan pengikatan. Jawaban ini oleh @Prateek Agarwal memiliki semuanya untuk saya, tetapi di sini lebih rinci.
Kotlin
Jawa
sumber
Cukup ganti kode di atas dengan ini dan itu akan berfungsi. Apa yang Anda lakukan salah adalah Anda memanggil setAdapter (adaptor) sebelum memanggil manajer tata letak.
sumber
Ini benar-benar kesalahan sederhana yang Anda dapatkan, tidak perlu melakukan kode apa pun dalam hal ini. Kesalahan ini terjadi karena file tata letak yang salah digunakan oleh aktivitas. Dengan IDE saya secara otomatis membuat tata letak v21 dari tata letak yang menjadi tata letak default aktivitas. semua kode yang saya lakukan di file tata letak lama dan yang baru hanya memiliki beberapa kode xml, yang menyebabkan kesalahan itu.
Solusi: Salin semua kode tata letak lama dan tempel di tata letak v 21
sumber
Dalam kasus saya, saya mengatur adaptor di dalam
onLocationChanged()
callback DAN debugging di emulator. Karena tidak mendeteksi perubahan lokasi, ia tidak pernah dipecat. Ketika saya mengaturnya secara manual di kontrol Extended dari emulator itu berfungsi seperti yang diharapkan.sumber
Saya telah memecahkan kesalahan ini. Anda hanya perlu menambahkan manajer tata letak dan menambahkan adaptor kosong.
Seperti kode ini:
sumber
Cukup tambahkan berikut ini ke
RecyclerView
Contoh:
sumber
Saya memiliki kesalahan ini, dan saya mencoba untuk memperbaikinya sampai saya menemukan solusinya.
Saya membuat metode pribadi buildRecyclerView, dan saya menyebutnya dua kali, pertama di onCreateView dan kemudian setelah panggilan balik saya (di mana saya mengambil data dari API). Ini adalah metode saya buildRecyclerView di Fragmen saya:
Selain itu, saya harus memodifikasi metode get-Item-Count di adaptor saya, karena On on-Create-View daftar adalah nol dan melalui kesalahan. Jadi, get-Item-Count saya adalah sebagai berikut:
sumber
Dalam situasi saya itu adalah komponen yang terlupakan yang terletak di kelas ViewHolder tetapi tidak terletak di file layout
sumber
Saya memiliki masalah yang sama dan menyadari bahwa saya sedang mengatur baik LayoutManage r dan adaptor setelah mengambil data dari sumber saya alih-alih mengatur keduanya dalam metode onCreate .
Kemudian memberitahu adaptor tentang perubahan data
sumber
Masalah ini karena Anda tidak menambahkan apa pun
LayoutManager
untukRecyclerView
.Alasan lain adalah karena Anda memanggil kode ini dalam NonUIThread. Pastikan untuk memanggil panggilan ini di UIThread.
Solusinya hanya Anda harus menambahkan
LayoutManager
untukRecyclerView
sebelum AndasetAdapter
di Thread UI.sumber
Masalah saya adalah tampilan pendaur ulang saya terlihat seperti ini
Padahal seharusnya terlihat seperti ini
sumber
Di
RecyclerView
kelas adaptor Anda , misalnyaMyRecyclerViewAdapter
, buat konstruktor dengan params berikut.mData
adalah data yang akan Anda sampaikan ke adaptor. Ini opsional jika Anda tidak memiliki data untuk dikirimkan.mInflater
adalahLayoutInflater
objek yang telah Anda buat dan Anda gunakan dalamOnCreateViewHolder
fungsi adaptor.Setelah ini, Anda memasang adaptor di MainActivity atau di mana pun Anda ingin berada di utas utama / UI dengan benar
sumber
Dipecahkan dengan mengatur daftar kosong yang diinisialisasi dan adaptor di bagian bawah dan memanggil notifyDataSetChanged ketika hasilnya diambil.
sumber
Saya kehilangan 16 menit hidup saya dengan masalah ini, jadi saya akan mengakui kesalahan memalukan yang saya buat ini - saya menggunakan Butterknife dan saya mengikat tampilan di onCreateView dalam fragmen ini.
Butuh waktu lama untuk mencari tahu mengapa saya tidak memiliki layoutmanager - tetapi jelas pandangan disuntikkan sehingga mereka tidak akan benar-benar nol, sehingga pendaur ulang tidak akan pernah menjadi nol .. wah!
Jika Anda mendapatkan masalah seperti ini lacak pandangan Anda dan gunakan sesuatu seperti
uiautomatorviewer
sumber
Tidak banyak jawaban tetapi saya memiliki masalah yang sama juga bahkan dengan kode yang benar. Kadang-kadang, itu hanya yang paling sederhana. Dalam hal ini, kesalahan OP juga bisa hilang
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
dari Manifest, yang mereproduksi kesalahan yang sama.sumber
Dalam kasus saya itu terjadi karena saya menyematkan RecyclerView di LinearLayout.
Saya sebelumnya memiliki file layout hanya berisi satu root RecyclerView sebagai berikut
Saya percaya masalahnya adalah dalam 3 garis yang terpisah. Bagaimanapun, saya pikir ini masalah sederhana, saya tidak akan mengerjakannya besok; pikir saya harus menulis apa yang saya temukan sebelum lupa tentang utas ini.
sumber
Menambahkan jawaban lain sejak saya menemukan utas ini tentang kesalahan Google. Saya mencoba untuk menginisialisasi
PreferenceFragmentCompat
tetapi saya lupa untuk mengembang XML preferensi dalamonCreatePreferences
seperti ini:Kesalahan adalah misteri sampai saya menyadari bahwa
PreferenceFragmentCompat
harus menggunakanRecyclerView
internal.sumber
// Ini terjadi ketika engkau bukan adaptor selama tahap pembuatan: panggilan notifyDataSetChanged () ketika respon api semakin Kerja Its
sumber