我调用了一个片段,它有一个来自Firebase的基础来填充列表,我这样称呼它:
private void getClients() {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("client");
myRef.addValueEventListener(valueEventListener);
}
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot){
readClients(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError error) {}
};
private void readClients(DataSnapshot dataSnapshot) {
for(DataSnapshot dss: dataSnapshot.getChildren()){
Client client = dss.getValue(Client.class);
listClients.add(client);
}
}
我尝试从createView,onStart和onResume调用getClients,但是没有向我显示包含数据的列表,只有当我最小化此应用或我更改其他应用时,我再次打开应用,列表显示数据。如何调用或显示数据库,片段会立即出现?
答案 0 :(得分:1)
在listview适配器上调用listviewAdapter.notifyDataSetChanged()
。
列表视图的适配器在listClients
填充之前设置,因此列表为空。
notifyDataSetChanged()
会导致列表视图使用listClients
private void readClients(DataSnapshot dataSnapshot) {
for(DataSnapshot dss: dataSnapshot.getChildren()){
Client client = dss.getValue(Client.class);
listClients.add(client);
}
listviewAdapter.notifyDataSetChanged()
}
查看docs以获取更多信息