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
答案 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()
});