【问题标题】:RecyclerView is not showing data from FirestoreRecyclerView 不显示来自 Firestore 的数据
【发布时间】:2021-05-09 11:10:10
【问题描述】:
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);

我的 RecyclerView 仅在 snapshotListener 之前显示元素“公司标记”。我的数据库工作得很好。 System.out.println 向我展示了具有正确名称的正确元素。

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

这就是我的数据库的样子:

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

【问题讨论】:

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


    【解决方案1】:

    我认为问题是在创建和设置适配器后触发了侦听器。数据列表修改后需要显式调用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()
            });
    

    【讨论】:

    • 嘿,我现在可以看到元素,但是这个解决方案的问题是,它不是动态添加的。例如,如果我的数据库非常大,加载和显示活动将需要很长时间。然而,recyclerview 的目的是它只显示前 10-20 个元素并在滚动时加载其他元素
    • 我想你要找的是分页,firebase.google.com/docs/firestore/query-data/query-cursors,你可以先查询前10个元素,然后添加一个onScrollListener来检测用户滚动到接近尾声,再查询下10个数据并将其添加到recyclerView,
    猜你喜欢
    • 2021-12-22
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2019-05-24
    • 2018-09-21
    • 2020-11-01
    • 2021-07-26
    相关资源
    最近更新 更多