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