RecyclerView 未显示来自 Firestore 的数据

时间:2021-05-09 11:10:10

标签: android firebase google-cloud-firestore android-recyclerview

recyclerView = findViewById(R.id.companyFeed_RecyclerView_CompanyList);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        ArrayList<Company> myCompanyData = new ArrayList<>();
        myCompanyData.add(new Company("Company marc","trustworthy",null));
        db.getFirestore().collection("companies").addSnapshotListener((value, error) -> {
            assert value !=null;
            for (QueryDocumentSnapshot snapshot : value) {
                Company c = Deserialization.deserializeCompany(snapshot);
                myCompanyData.add(new Company(c.getName(),c.getDescription(),null));
                System.out.println("company: " + myCompanyData.get(1).getName());
            }
        });
        CompanyAdapter myCompanyAdapter = new CompanyAdapter(myCompanyData, CompanyFeedActivity.this);
        recyclerView.setAdapter(myCompanyAdapter);

My RecyclerView 只在snapshotListener 之前显示元素“Company mark”。我的数据库工作得很好。 System.out.println 向我展示了正确名称的正确元素。

有没有更好的方法来访问元素或者我做错了什么?

这是我的数据库的样子:

Firestore-root
  |
  --- companies (collection)
        |
        --- company 1 (document)
             |
             --- name: Marc
             |
             --- description: test
        |
        --- company 2 (document)
             |
             --- name: Lucas
             |
             --- description: test2

1 个答案:

答案 0 :(得分:2)

我认为问题是在创建并设置适配器后触发了侦听器。修改数据列表后需要显式调用myCompanyAdapter.notifyDataSetChanged

请试试下面的代码

 recyclerView = findViewById(R.id.companyFeed_RecyclerView_CompanyList);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        ArrayList<Company> myCompanyData = new ArrayList<>();

        CompanyAdapter myCompanyAdapter = new CompanyAdapter(myCompanyData, CompanyFeedActivity.this);
        recyclerView.setAdapter(myCompanyAdapter);
        myCompanyData.add(new Company("Company marc","trustworthy",null));
        db.getFirestore().collection("companies").addSnapshotListener((value, error) -> {
            assert value !=null;
            for (QueryDocumentSnapshot snapshot : value) {
                Company c = Deserialization.deserializeCompany(snapshot);
                myCompanyData.add(new Company(c.getName(),c.getDescription(),null));
                System.out.println("company: " + myCompanyData.get(1).getName());
            }
            myCompanyAdapter.notifyDataSetChanged()
        });