Wie kann ich OnClickListener aus den ViewHolders von RecyclerView entfernen, wenn sie entsorgt werden?

8

Ich verwende RecyclerViews in meinem App-Projekt und setze OnClickListeners mit ihren ViewHolders (in ihren Konstruktoren wie in einem StackOverflow Q & amp; A ).

Dann habe ich diese Frage: Wie kann ich OnClickListeners aus RecyclerViews ViewHolders entfernen, wenn sie entsorgt werden.

Normalerweise können wir einen OnClickListener folgendermaßen entfernen:

%Vor%

Und wenn es ein PagerAdapter von ViewPager ist, können wir das in destroyItem method.

tun %Vor%

Wo kann ich RecyclerView verwenden? - Oder brauche ich das nicht?

    
hata 21.11.2015, 17:42
quelle

2 Antworten

14

Wenn Sie den onCLickListener () der Ansichten von RecyclerView.Adapter auf Null setzen möchten, wenn die Ansicht vom Bildschirm verschwindet, können Sie dies tun, indem Sie die Ссылка in Ihrem RecyclerView-Adapter. Sie erhalten den Halter als Parameter, der gerade vom Bildschirm verschwunden ist. Sie können onClickListener für jede in diesem Halter verfügbare Ansicht null setzen.

Oder wenn Sie das gleiche tun möchten, wenn es auf dem Bildschirm sichtbar wird, können Sie dies in onBindViewHolder () tun. Dies macht jedoch keinen Sinn, da Sie den Zuhörer nicht einstellen können.

Zu beachtende Punkte im Zusammenhang mit dieser Antwort:
Das Festlegen des Listeners auf null kann ebenfalls erforderlich sein, wenn Sie nicht festlegen möchten, dass der Klicklistener für jeden Datensatz angezeigt wird, jedoch nur wenige. In diesem Fall ist es immer besser, die Listener auf Null zu setzen, wenn sie vom Bildschirm verschwinden. Sonst wird RecyclerView die zurückgelassenen Halterobjekte wiederverwenden (recyceln), um den neuen Datensatz darzustellen, der sichtbar wird. In diesem Prozess wird für den Datensatz (in einem Halter anzeigen), für den Sie den Listener nicht festgelegt haben, der Listener aufgrund des Recyclings festgelegt.

Alles in allem ist es Aufgabe des Entwicklers, die Ansichten zurückzusetzen (Löschen von Bildansichten, Textansichten usw.) und Null setzen des onCLickListener etc.

    
cgr 21.11.2015, 20:30
quelle
2

Wenn Sie RecyclerView und binding OnClickListener s für jede Zeilenstammansicht verwenden, brauchen Sie sie nicht zu entfernen.

Wenn jedoch einige Ansichten nicht auf Klickereignisse reagieren sollen, verwenden Sie setOnClickListener(null)

    
michal.luszczuk 21.11.2015 18:18
quelle