我正在使用Firebase实时数据库。我为每个用户都有一个朋友列表。我正在将用户的朋友列表添加到recyclerview。没有错误,我可以看到朋友列表。但是,如果我更改了有关用户朋友信息的信息,则适配器中没有任何更改。如果我将新用户添加到朋友列表,则适配器会感应到更改。 我使用嵌套的Firebase监听器。第一个侦听器用于获取用户朋友ID,第二个侦听器用于使用ID获取朋友信息。
我希望用户朋友更改其在线状态时,适配器会感知到它。
这是我用于获取用户朋友列表的代码:
databaseReference.child("users").child(user_id).child("friends").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//friends.clear();
//friendInfoList.clear();
//Toast.makeText(FriendsActivity.this, dataSnapshot.toString(), Toast.LENGTH_SHORT).show();
for(DataSnapshot ds:dataSnapshot.getChildren()){
String friend_id=ds.getValue(String.class);
friends.add(new Friends(friend_id));
Toast.makeText(FriendsActivity.this, friend_id, Toast.LENGTH_SHORT).show();
databaseReference.child("users").child(friend_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//friendInfoList.clear();
Users user=dataSnapshot.getValue(Users.class);
friendInfoList.add(new FriendInfo(user.getUsername(),user.getCountry(),user.isStatus()));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
adapter=new FriendListRecyclerAdapter(FriendsActivity.this,friendInfoList);
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
答案 0 :(得分:1)
要更新适配器中的数据,请调用方法notifyDataSetChanged()
。
从文档中
通知附加的观察者基础数据已更改,任何反映数据集的View均应刷新自身。
答案 1 :(得分:1)
更改好友信息后,可能不会触发“ users / user_id / friends”节点。另外,我认为您应该使用“子事件监听器”。