【问题标题】:Show a database of Firebase in a arraylist from a fragment在片段的数组列表中显示 Firebase 数据库
【发布时间】:2016-06-26 18:54:32
【问题描述】:

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

【问题讨论】:

  • 在 for 循环之后在 listview 适配器上调用 adapter.notifyDataSetChanged()
  • 谢谢!!!!这就是答案
  • @hello_world 我看到你删除了你给出的答案。但既然这是正确的答案,你能不能再发一次(或取消删除它)。如果您添加一个链接,例如 notifyDataSetChanged() 的文档,甚至可能是一个示例 sn-p,那么它将完全可以接受并帮助您获得声誉。

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


【解决方案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 了解更多信息

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 2018-05-10
    • 2018-04-24
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2021-11-06
    • 2020-05-11
    相关资源
    最近更新 更多