首页  >  文章  >  Java  >  如何使用 FirebaseUI-Android 管理 RecyclerView Item ViewHolders 中的事件侦听器?

如何使用 FirebaseUI-Android 管理 RecyclerView Item ViewHolders 中的事件侦听器?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-26 15:25:03436浏览

How to Manage Event Listeners in RecyclerView Item ViewHolders with FirebaseUI-Android?

如何使用 FirebaseUI-Android 库在 RecyclerView Item ViewHolder 中添加和删除事件监听器

FirebaseUI-Android 库简化了显示 Firebase 的任务RecyclerView 中的数据。但是,在处理包含引用字段的文档时,需要使用 addSnapshotListener 检索引用的数据。

在本文中,我们将指导您如何使用 addSnapshotListener 并在不需要时将其删除RecyclerView 适配器的 populateViewHolder 方法。

populateViewHolder 方法

populateViewHolder 方法是将 Firebase 快照中的数据绑定到 ViewHolder 的地方。要检索引用的数据,请使用以下方法:

<code class="java">@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);
    // Add a listener to the document reference
    EventListener<DocumentSnapshot> eventListener = 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");
            }
        }
    };
    docRef.addSnapshotListener(eventListener);
}</code>

分离事件监听器

当不再需要数据时,分离监听器非常重要避免不必要的带宽消耗。为此,请声明一个全局 ListenerRegistration 变量,并仅在需要时添加侦听器,如下所示:

<code class="java">// Inside your RecyclerView adapter
private ListenerRegistration listenerRegistration;

if (listenerRegistration == null) {
    listenerRegistration = yourRef.addSnapshotListener(eventListener);
}</code>

并在 onStop() 方法中删除侦听器:

<code class="java">@Override
protected void onStop() {
    if (listenerRegistration != null) {
        listenerRegistration.remove();
    }
}</code>

其他注意事项

  • 如果您只需要读取一次文档,请考虑使用 get() 方法而不是 addSnapshotListener。
  • 您还可以将 Activity 传递为addSnapshotListener 中的第一个参数让 Firestore 在活动停止时自动清理侦听器。

以上是如何使用 FirebaseUI-Android 管理 RecyclerView Item ViewHolders 中的事件侦听器?的详细内容。更多信息请关注PHP中文网其他相关文章!

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