Maison  >  Article  >  Java  >  Comment gérer les écouteurs d'événements dans les ViewHolders d'éléments RecyclerView avec FirebaseUI-Android ?

Comment gérer les écouteurs d'événements dans les ViewHolders d'éléments RecyclerView avec FirebaseUI-Android ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 15:25:03436parcourir

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

Comment ajouter et supprimer des écouteurs d'événements dans RecyclerView Item ViewHolder avec la bibliothèque FirebaseUI-Android

La bibliothèque FirebaseUI-Android simplifie la tâche d'affichage de Firebase données dans RecyclerView. Cependant, lorsque vous travaillez avec des documents contenant des champs de référence, il est nécessaire de récupérer les données référencées à l'aide de addSnapshotListener.

Dans cet article, nous vous expliquerons comment utiliser addSnapshotListener et le supprimer lorsqu'il n'est pas nécessaire dans le méthode populateViewHolder d'un adaptateur RecyclerView.

Méthode populateViewHolder

La méthode populateViewHolder est l'endroit où vous liez les données de l'instantané Firebase à votre ViewHolder. Pour récupérer les données référencées, utilisez l'approche suivante :

<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>

Détacher l'écouteur d'événement

Il est important de détacher l'écouteur lorsque les données ne sont plus nécessaires pour éviter une consommation inutile de bande passante. Pour ce faire, déclarez une variable globale ListenerRegistration et ajoutez l'écouteur uniquement lorsque cela est nécessaire, comme ceci :

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

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

Et supprimez l'écouteur dans la méthode onStop() :

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

Considérations supplémentaires

  • Si vous n'avez besoin de lire le document qu'une seule fois, envisagez d'utiliser la méthode get() au lieu de addSnapshotListener.
  • Vous pouvez également transmettre l'activité comme le premier argument de addSnapshotListener pour que Firestore nettoie automatiquement les écouteurs lorsque l'activité est arrêtée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn