我有一个ValueEventListener
,我想在一个人每次加入房间时执行。该侦听器将更新会议室中的用户列表,并将这些用户显示在屏幕上。
问题是,在您已经加入会议室之后,返回主屏幕,然后又回到已经属于会议室的会议室中,由于数据库数据库未调用ValueEventListener
不会更新,因为用户已经在房间里了。这也意味着,直到发生某些事情来更新数据库时,用户列表才会显示在屏幕上
我的问题是如何在不实际更新数据库的情况下强制ValueEventListener
?
这是我当前拥有的听众
gameRef.child(ID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//updates the UI
updateUI(new ListCallback() {
@Override
public void onCallback(List<String> value) {
mAdapter.notifyDataSetChanged();
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是一个非常基本的侦听器,它调用如下所示的updateUI
回调,然后更新我已设置为显示会议室成员列表的RecyclerView
。 Activity
打开时如何强制调用?
这是我的updateUI
回调
public interface ListCallback {
void onCallback(List<String> value);
}
public void updateUI(final ListCallback callBack) {
gameRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
getCurrentGame(new CurrentGameCallback() {
@Override
public void onCallback(String ID) {
memberList.clear();
for(DataSnapshot ds : dataSnapshot.child(ID).child("Members").getChildren()) {
String memberName = ds.child("firstName").getValue().toString();
memberList.add(memberName);
}
}
});
callBack.onCallback(memberList);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
membersList
只是一个ArrayList
,所有成员都在会议室中