【发布时间】:2020-06-10 12:17:51
【问题描述】:
我有以下代码:
someDocumentRef.collection("data").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
RelativeLayout emptyLayout = fragmentView.findViewById(R.id.empty_layout);
if (task.getResult() == null || task.getResult().isEmpty()) {
emptyLayout.setVisibility(View.VISIBLE);
rv.setVisibility(View.GONE);
} else {
Map<Character,List<QueryDocumentSnapshot>> dataDoc = new HashMap<>();
for (QueryDocumentSnapshot document : task.getResult()) {
char letter = getFirstLetter(document.getString("full_name"));
List<QueryDocumentSnapshot> l = dataDoc.get(letter);
if (l == null) {
l = new ArrayList<>();
l.add(document);
dataDoc.put(letter, l);
} else {
l.add(document);
}
}
// Create recycler view
emptyLayout.setVisibility(View.GONE);
rv.setVisibility(View.VISIBLE);
adapter = new DataAdapter(getActivity(), dataDoc);
rv.setLayoutManager(new LinearLayoutManager(getActivity()));
rv.setAdapter(adapter);
}
}
}
});
在我的onCreateView 方法(片段)中。基本上,它从 Firebase 数据库的集合 data 中获取所有文档,并将其传递给适配器以创建回收器视图。效果很好,但我的问题是如何监听数据库中的变化,一旦插入或删除了一些新文档,更新回收器视图?请注意,我不使用FirestoreRecyclerAdapter 适配器,而是我的自定义适配器。另外,我正在使用 Firebase Cloud 数据库。
【问题讨论】:
-
使用 addOnValueChangeListener ,它的 onDataChange 方法返回一个数据快照。因此,当您的数据库更新时,总会有那个监听器在监听。然后在适配器中添加一个方法来接收新数据
-
所以不可能在集合上设置监听器?如果我为每个文档设置了一个监听器,我该如何更新 RV?
-
对不起,我说的是实时数据库而不是火存储。但是我不确定firestore是实时的,我没用过,我建议你切换到实时数据库
-
@Jason 不幸的是我不能。如果其他人有想法,我会等待。谢谢。
标签: java android firebase android-recyclerview google-cloud-firestore