我有以下代码:
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数据库。
答案 0 :(得分:1)
您实际上可以收听Firebase的更改,对于之前的评论感到抱歉。我查看了消防商店的文件,并看到了
final DocumentReference docRef =
db.collection("cities").document("SF");
docRef.addSnapshotListener(new
EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot
snapshot,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "Listen failed.", e);
return;
}
if (snapshot != null && snapshot.exists()) {
Log.d(TAG, "Current data: " + snapshot.getData());
} else {
Log.d(TAG, "Current data: null");
}
}
});
引用自https://firebase.google.com/docs/firestore/query-data/listen
我希望对您有帮助
修改 要收听整个收藏集:
db.collection("cities")
.addSnapshotListener(new
EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value,
@Nullable FirebaseFirestoreException e)
{
if (e != null) {
Log.w(TAG, "Listen failed.", e);
return;
}
List<String> cities = new ArrayList<>();
for (QueryDocumentSnapshot doc : value) {
if (doc.get("name") != null) {
cities.add(doc.getString("name"));
}
}
Log.d(TAG, "Current cites in CA: " + cities);
}
});
这肯定会听取整个收藏。 参考:https://stackoverflow.com/a/48608816/8714139
修改,了解如何获取您的值
Map<Character,List<QueryDocumentSnapshot>> dataDoc = new HashMap<>();
for (QueryDocumentSnapshot document : value) {
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);
}
}