我对列表有疑问。我有一个列表,可以保存多个数据。然后,当我运行我的应用程序时,它工作并显示数据。但是当我调试并想要检查我的列表的大小时,只显示0的大小。问题是什么? 请帮忙。
这是我的代码:
query.addValueEventListener(new com.firebase.client.ValueEventListener() {
@Override
public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (com.firebase.client.DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
SisaKendaraanModel sisaModel = postSnapshot.getValue(SisaKendaraanModel
if (//somecondition) {
if (//somecondition) {
kendaraanModel.add(kendaraan);
adapter.notifyDataSetChanged();
} else {
kendaraanModel.remove(kendaraan);
adapter.notifyDataSetChanged();
break;
}
} else {
if (//somecondition) {
kendaraanModel.add(kendaraan);
adapter.notifyDataSetChanged();
} else {
kendaraanModel.remove(kendaraan);
adapter.notifyDataSetChanged();
break;
}
}
}
} else {
if (//somecondition) {
kendaraanModel.add(kendaraan);
adapter.notifyDataSetChanged();
} else {
kendaraanModel.remove(kendaraan);
adapter.notifyDataSetChanged();
}
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
} else {
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
long sizeKendaraanModel = kendaraanModel.size(); // it show 0
adapter = new MenuHasilPencarianAdapter(MenuHasilPencarian.this, kendaraanModel, tanggalSewaPencarian, tanggalKembaliPencarian, jumlahKendaraanPencarian);
recyclerView.setAdapter(adapter);
这是我的调试结果:
答案 0 :(得分:0)
这是因为你正在" kendaraanModel"中添加价值。初始化Recycler之后 并且在" kendaraanModel"中添加值之后,您已添加> adapter.notifyDataSetChanged();即影响清单.. 所以,
如果你想检查大小你可以在" OnDataChange"
中查看它
答案 1 :(得分:0)
看到您正在进行异步调用addValueEventListener
。您的代码将在设置监听器之后立即调用。
long sizeKendaraanModel = kendaraanModel.size();
因此,每次使其按顺序调用时,这将给出0大小。未调用的onDataChange
导致其异步调用。
你可以匹配这个场景,当我们开始和新线程及其在自己的流程中运行时(run()
方法)然后我们必须等待响应。
所以你能做的就是。
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot != null) {
// Add remove your value here
}
long sizeKendaraanModel = kendaraanModel.size();
adapter = new MenuHasilPencarianAdapter(MenuHasilPencarian.this, kendaraanModel, tanggalSewaPencarian, tanggalKembaliPencarian, jumlahKendaraanPencarian);
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
同样在你的代码中,我看到很多adapter.notifyDataSetChanged();
。如果您正在使用回收站视图notifyDataSetChanged()
,那么只需通知列表进行更改即可。所以请使用。
notifyItemRangeChanged()
notifyItemChanged()
notifyItemInserted()
notifyItemRemoved()