从片段中显示arraylist中的Firebase数据库

时间:2016-06-26 18:54:33

标签: android arraylist firebase fragment firebase-realtime-database

我调用了一个片段,它有一个来自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,但是没有向我显示包含数据的列表,只有当我最小化此应用或我更改其他应用时,我再次打开应用,列表显示数据。如何调用或显示数据库,片段会立即出现?

1 个答案:

答案 0 :(得分:1)

在for循环之后

在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以获取更多信息