notifyDataSetChanged()不在侦听器内工作
我有一个子事件监听器,它从Fire-base加载数据,我将数据加载到数组列表中。我需要在数据完全加载时设置适配器。所以我使用单值事件来识别子事件完成,当我尝试在单值事件监听器中设置适配器时,它没有设置适配器。请协助..
以下是我的代码:
注意:我已在oncreate方法中设置了适配器。
db.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
bigProgressBar.setVisibility(View.GONE);
Log.d("value",abc.toString());// returns empty!!
sampleAdapter.notifyDataSetChanged();
}
}
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(final DataSnapshot dataSnapshot, String s) {
if (dataSnapshot != null) {
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
Events job = dataSnapshot.getValue(Events.class);
abc.add( job);
}
});
}
}
答案 0 :(得分:0)
我认为5.0
5.1
5.2
5.3
5.4
5.5
Half way done!
5.6
5.7
5.8
5.9
6.0
All the way done!
无效的原因是因为它在notifyDataSetChanged()
之前被调用,所以在将数据添加到abc.add( job)
之前更新适配器。
如果您使用的是ArrayList
,我建议您查看此库。 https://github.com/firebase/FirebaseUI-Android
或
在将数据加载到所有RecyclerView
后更新适配器。
ArrayList
请注意,db.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
bigProgressBar.setVisibility(View.GONE);
for(DataSnapshot child : dataSnapshot.getChildren()) {
Events event = child.getValue(Events.class);
abc.add(job);
}
sampleAdapter.notifyDataSetChanged();
}
}
是包含db
数据的根节点。