Heim  >  Artikel  >  Java  >  Wie verwalte ich Ereignis-Listener in RecyclerView Item ViewHolders mit FirebaseUI-Android?

Wie verwalte ich Ereignis-Listener in RecyclerView Item ViewHolders mit FirebaseUI-Android?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 15:25:03436Durchsuche

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

So fügen Sie Ereignis-Listener in RecyclerView Item ViewHolder mit der FirebaseUI-Android-Bibliothek hinzu und entfernen sie.

Die FirebaseUI-Android-Bibliothek vereinfacht die Aufgabe der Anzeige von Firebase Daten in RecyclerView. Wenn Sie jedoch mit Dokumenten arbeiten, die Referenzfelder enthalten, müssen Sie die referenzierten Daten mithilfe von addSnapshotListener abrufen.

In diesem Artikel zeigen wir Ihnen, wie Sie addSnapshotListener verwenden und entfernen, wenn es nicht benötigt wird populateViewHolder-Methode eines RecyclerView-Adapters.

populateViewHolder-Methode

Mit der populateViewHolder-Methode binden Sie die Daten aus dem Firebase-Snapshot an Ihren ViewHolder. Um die referenzierten Daten abzurufen, verwenden Sie den folgenden Ansatz:

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

Ereignis-Listener trennen

Es ist wichtig, den Listener zu trennen, wenn die Daten nicht mehr benötigt werden Vermeiden Sie unnötigen Bandbreitenverbrauch. Deklarieren Sie dazu eine globale ListenerRegistration-Variable und fügen Sie den Listener nur bei Bedarf hinzu, wie folgt:

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

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

Und entfernen Sie den Listener in der onStop()-Methode:

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

Zusätzliche Überlegungen

  • Wenn Sie das Dokument nur einmal lesen müssen, sollten Sie die Verwendung der get()-Methode anstelle von addSnapshotListener in Betracht ziehen.
  • Sie können die Aktivität auch als übergeben das erste Argument in addSnapshotListener, damit Firestore die Listener automatisch bereinigt, wenn die Aktivität beendet wird.

Das obige ist der detaillierte Inhalt vonWie verwalte ich Ereignis-Listener in RecyclerView Item ViewHolders mit FirebaseUI-Android?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn