首页  >  文章  >  Java  >  如何通过 FirebaseFirestore 查询在 RecyclerView 项的“populateViewHolder”方法中使用“addSnapshotListener”和“remove”?

如何通过 FirebaseFirestore 查询在 RecyclerView 项的“populateViewHolder”方法中使用“addSnapshotListener”和“remove”?

DDD
DDD原创
2024-10-26 09:05:30921浏览

How to Use `addSnapshotListener` and `remove` in a RecyclerView Item's `populateViewHolder` Method with a FirebaseFirestore Query?

在RecyclerView Item的PopulateViewHolder中使用addSnapshotListener和remove

问题:

如何在populateViewHolder中使用addSnapshotListener和remove具有 FirebaseFirestore 查询的 RecyclerView 项目的方法?

FirebaseUI-Android 库注意事项:

FirebaseUI-Android 库中的 FirebaseRecyclerAdapter 处理 RecyclerView 的数据更改通知。但是,这不支持使用 addSnapshotListener 来填充视图持有者。

使用 EventListener 和全局变量:

要在 populateViewHolder 中使用 addSnapshotListener,请按照以下步骤操作:

  1. 声明一个全局EventListener变量:

    <code class="java">EventListener<DocumentSnapshot> eventListener;</code>
  2. 初始化监听器并添加到populateViewHolder:

    <code class="java">eventListener = new EventListener<DocumentSnapshot>() {
     @Override
     public void onEvent(DocumentSnapshot snapshot, FirebaseFirestoreException e) {
         if (e != null) {
             Log.w(TAG, "Listen failed.", e);
             return;
         }
    
         if (snapshot != null && snapshot.exists()) {
             // Do what you need to do
         }
     }
    };
    if (listenerRegistration == null) {
     listenerRegistration = yourRef.addSnapshotListener(eventListener);
    }</code>
  3. 在onStop()中移除监听器:

    <code class="java">@Override
    protected void onStop() {
     if (listenerRegistration != null) {
         listenerRegistration.remove();
     }
    }</code>
  4. 在 onStart() 中再次添加监听器:

    <code class="java">@Override
    protected void onStart() {
     super.onStart();
     if (listenerRegistration == null) {
         listenerRegistration = yourRef.addSnapshotListener(eventListener);
     }
    }</code>

替代选项:

  • 如果不需要实时更新数据,可以考虑使用get()。这会读取文档一次,并且不需要侦听器。
  • 您还可以通过将活动作为第一个参数传递给 addSnapshotListener 来手动删除侦听器。当 Activity 停止时,Firestore 将自动清理监听器。

以上是如何通过 FirebaseFirestore 查询在 RecyclerView 项的“populateViewHolder”方法中使用“addSnapshotListener”和“remove”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn