【发布时间】:2017-03-27 15:04:43
【问题描述】:
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);
}
});
}
}
【问题讨论】:
-
尝试使用
.addValueEventListener()并在addChildEventListener()之后对其进行初始化。因为我就是这样使用它并得到我想要的。附加说明:(1)dataSnapshotwill never be null,你应该使用dataSnapshot.exist()。 (2)你为什么使用处理程序?有什么特别的原因吗? -
谢谢@koceeng,我真的不希望监听器总是被调用。我希望它只被调用一次。有没有办法在单值事件监听器中设置适配器。 1)感谢cmets。我将编辑我的代码。 2)我还有一些我没有提到的代码:)
标签: android firebase firebase-realtime-database android-recyclerview