Saya RecyclerView
tidak memanggil onCreateViewHolder
, onBindViewHolder
bahkan MenuViewHolder
konstruktor, karena itu tidak ada yang muncul di RecyclerView
. Saya menaruh log untuk debugging, dan tidak ada log yang ditampilkan. Apa yang mungkin menjadi masalah?
Adaptor saya:
public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> {
private LayoutInflater inflater;
List<Menu> data = Collections.emptyList();
public MenuAdapter(Context context, List<Menu> data) {
Log.i("DEBUG", "Constructor");
inflater = LayoutInflater.from(context);
Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString());
this.data = data;
for(Menu menu: this.data){
Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu);
}
}
@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.row_menu, parent, false);
MenuViewHolder holder = new MenuViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MenuViewHolder holder, int position) {
Log.i("DEBUG MENU", "onBindViewHolder");
Menu current = data.get(position);
holder.title.setText(current.menu);
}
@Override
public int getItemCount() {
return 0;
}
class MenuViewHolder extends RecyclerView.ViewHolder {
TextView title;
ImageView icon;
public MenuViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.menuText);
}
}
XML baris khusus saya:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/menuText"
android:text="Dummy Text"
android:layout_gravity="center_vertical"
android:textColor="#222"/>
dan Fragmen saya:
public NavigationFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"));
if (savedInstanceState != null) {
mFromSavedInstaceState = true;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_navigation, container, false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.drawer_list);
MenuAdapter adapter = new MenuAdapter(getActivity(), getData());
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
return view;
}
java
android
android-recyclerview
Malinosqui
sumber
sumber
Jawaban:
Anda
getItemCount
metodereturns 0
. JadiRecyclerView
jangan pernah mencoba untuk membuat tampilan. Buat itu mengembalikan sesuatugreater than 0
.sebagai contoh
sumber
Yang lain adalah pastikan Anda mengatur manajer tata letak ke RecyclerView:
sumber
saya lupa menambahkan baris di bawah ini setelah saya menambahkannya bekerja untuk saya
sumber
Ini tidak berlaku untuk kasus khusus Anda. Tapi ini mungkin bisa membantu orang lain.
Alasan ini bisa ceroboh menggunakan metode berikut
Jika tidak digunakan dengan hati-hati, ini dapat menyebabkan
onBindView
danonCreateViewHolder
tidak dipanggil sama sekali, tanpa kesalahan dalam log.sumber
Silakan atur manajer tata letak
RecyclerView
seperti kode di bawah ini:sumber
Untuk apa nilainya, saya mengamatinya ketika saya mengatur adaptor tampilan pendaur ulang sebelum adaptor benar-benar diinisialisasi. Solusi adalah memastikan
recyclerView.setAdapter(adapter)
dipanggil dengan adaptor non-nullsumber
Saya sangat sangat berharap ini membantu seseorang suatu hari nanti. Saya hanya menghabiskan lebih dari satu jam untuk kacang yang satu ini!
Saya punya ini:
Ketika saya seharusnya memiliki ini:
Karena saya bodoh memanggil adaptor saya
adapter
, itu dibayangi oleh adaptor tampilan pendaur ulang di blok berlaku! Saya mengganti nama adaptor ke projectAdapter untuk membedakannya dan masalah terpecahkan!sumber
Mengatur ketinggian
TextView
di dalamcustom.xml
atauRecyclerView
. Jika tinggiwrap-content
, makaRecyclerView
tidak akan terlihat.sumber
Ini terjadi ketika saya
RecyclerView
berada di dalam aScrollView
dan saya menggunakan Android Support Library 23.0. Untuk memperbaikinya, saya memperbarui ke Perpustakaan Dukungan Android 23.2:Dalam build.gradle:
sumber
Tambahkan ini ke Kelas Adaptor Anda
sumber
Mungkin ini membantu seseorang tetapi jika Anda mengatur visibilitas RecycleView Anda ke PERGI, metode adaptor tidak akan dipanggil sama sekali ... Butuh beberapa waktu untuk mengetahuinya.
sumber
Saya memiliki masalah yang sama, karena saya menggunakan
android.support.constraint.ConstraintLayout
sumber daya tata letak. Berubah untukFrameLayout
membantu.sumber
android.support.constraint.ConstraintLayout
?Pilihan lain adalah jika Anda mengirim daftar ini dengan menggunakan get, verifikasi apakah Anda memiliki referensi yang benar, misalnya
sumber
Saya berjuang dengan masalah ini selama berjam-jam. Saya menggunakan sebuah fragmen. Dan masalahnya tidak mengembalikan
view
. Di bawah ini adalah kode saya:sumber
Lihat jawaban saya jika Anda menggunakan pustaka data mengikat Android - Pastikan Anda mengatur tata letak untuk daur ulang dan jumlah item harus lebih besar dari 0
Selamat coding :-)
sumber
Dalam kasus saya, saya mengatur ID RecyclerView saya ke "recyclerView". Tampaknya ID ini sudah ditentukan di suatu tempat, karena ketika saya mengubahnya ke ID yang berbeda, metode dari adaptor dipanggil dengan benar.
sumber
Jika menggunakan adaptor khusus jangan lupa untuk mengatur ItemCount dengan ukuran koleksi Anda.
sumber
Dalam kasus saya, ukuran daftar saya adalah 0 dan tidak memanggil metode onCreateViewHolder. Saya perlu menampilkan pesan di pusat untuk daftar kosong sebagai pengganti jadi saya melakukannya seperti ini dan itu berfungsi seperti pesona. Jawaban oleh @Konstantin Burov membantu.
sumber
Encouter saya adalah metode overridid onBindViewHolder (pemegang, posisi) dari RecyclerView.adaptor tidak dipanggil. Metode onCreateViewHolder dipanggil, getItemCount dipanggil. Jika Anda membaca spesifikasi untuk Recyclerview Adapter, Anda akan mengetahui bahwa jika Anda telah mengesampingkanBindViewHolder (pemegang, posisi, daftar payload) akan dipanggil. Jadi harap berhati-hati.
sumber
onBindViewHolder
?Jika Anda menempatkan wrap_content sebagai tinggi daftar Anda serta tinggi daftar item Anda, tidak ada yang akan muncul dan tidak ada fungsi recyclerView Anda yang akan dipanggil. Perbaiki ketinggian item atau masukkan match_parent untuk tinggi daftar. Itu memecahkan masalah saya.
sumber
Kesalahan saya adalah menggembungkan tampilan yang salah di Fragment onCreateView.
sumber
buka xml Anda. Dan ubah tata letak Anda untuk membungkus konten. Elemen yang satu menyembunyikan elemen berikutnya, sehingga metodenya tidak berfungsi!
sumber
Tolong lakukan hal berikut
sumber
Dalam kasus saya setelah mengubah Aktivitas untuk menggunakan ViewModel dan DataBinding, saya lupa menghapus
setContentView
metode pemanggilan darionCreate
metode. Dengan menghapusnya masalah saya terpecahkan.sumber
Bagi saya, itu karena setHasStableIds (true); metode telah ditetapkan. Hapus itu dan itu akan berhasil
sumber
recyclerView.setAdapter (adaptor); disebut Daftar recyclerView diisi dengan memanggil metode.
sumber
Pastikan Anda
XML
danKoltin/Java
kode cocok. Dalam kasus saya, saya memiliki masalah denganViewHolder
sejak saya menulis:Tetapi karena kode XML saya adalah:
Saya harus mengubah baris sebelumnya menjadi:
Selain itu, saya juga harus menghapus:
Semoga ini bisa membantu Anda :)
sumber
Dalam kasus saya, saya kehilangan panggilan
notifyDataSetChanged()
setelah mengatur daftar dalam adaptor.sumber
Dalam kasus saya, saya kehilangan untuk mengatur orientasi di LinearLayout saya.
Setelah menambahkan masalah orientasi diperbaiki.
sumber
Masalah saya adalah
layout_height
danlayout_width
dari RecyclerView diatur ke0dp
.sumber