У меня есть 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
со всеми членами вкомната