我已经用FirebaseUI-Android库实现了RecyclerView
。
我使用[[RecyclerView
FirebaseRecyclerAdapter
实时数据发生了很好的变化在集合中,该数据文档的字段类型为Boolean , Integer, Reference。我
[希望使用该引用从populateViewHolder
和addSnapshotListener
中获取数据
FirebaseRecyclerAdapter<Conv, ConvViewHolder> firebaseConvAdapter = new FirebaseRecyclerAdapter<Conv, ConvViewHolder>(
Conv.class,
R.layout.users_single_layout,
ConvViewHolder.class,
conversationQuery
) {
@Override
protected void populateViewHolder(final ConvViewHolder convViewHolder, final Conv conv, int i) {
final String list_user_id = getRef(i).getKey();
final DocumentReference docRef = db.collection("cities").document(list_user_id);
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");
}
}
});
}
};
mConvList.setAdapter(firebaseConvAdapter);
Firebase说如果您添加addSnapshotListener,则一旦不需要该Detach a listener,则必须将其删除当您不再对侦听数据感兴趣时,必须分离侦听器,以使事件回调不再被调用。这允许客户端停止使用带宽来接收更新。您可以使用onSnapshot()
上的取消订阅功能停止收听更新。
我已经用FirebaseUI-Android库实现了RecyclerView。一旦我使用FirebaseRecyclerAdapter In Collection中的数据文档的字段类型为...
EventListener<DocumentSnapshot>
:EventListener<DocumentSnapshot> eventListener = new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(DocumentSnapshot snapshot, FirebaseFirestoreException e) {
if (snapshot != null && snapshot.exists()) {
//Do what you need to do
}
}
};
还有一种删除监听器的更优雅的方法,该方法是将活动作为addSnapshotListener()方法中的第一个参数传递,因此Firestore可以在活动停止时自动清理监听器。Blockquote