2015-11-21 11 views
8

Ich verwende RecyclerViews in meinem App-Projekt und setze OnClickListeners mit ihren ViewHolders (in ihren Konstruktoren wie in einem StackOverflow Q&A erwähnt).Wie kann ich OnClickListener von den ViewHoldern von RecyclerView entfernen, wenn sie entsorgt werden?

Dann habe ich diese Frage: Wie kann ich OnClickListeners von RecyclerView ViewHolder entfernen, wenn sie entsorgt werden.

Normalerweise können wir einen OnClickListener, indem Sie diese entfernen:

view.setOnClickListener(null); 

Und wenn es ein ViewPager der PagerAdapter ist, können wir so in destroyItem Methode tun.

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    View view = container.findViewById(R.id.viewId); 
    view.setOnClickListener(null); 
} 

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

+1

I don Denke, du musst den Klick-Listener auf null setzen. Der Rückruf sollte vom Garbage Collector übernommen werden, wenn die Ansicht entfernt wird. Außerdem hätte ich erwartet, dass eine removeOnClicklistener-Methode vorhanden wäre. – cYrixmorten

Antwort

14

verwenden, klicken Wenn Sie die OnClickListener() die Ansichten von RecyclerView.Adapter auf null gesetzt werden soll, wenn der Blick aus dem Bildschirm geht, können Sie tun also durch Überschreiben der http://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#onViewDetachedFromWindow(VH) 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 nur das gleiche tun möchten, wenn es auf dem Bildschirm sichtbar wird, können Sie in onBindViewHolder() tun. Dies macht jedoch keinen Sinn, da Sie den Zuhörer nicht einstellen können.

Punkte zu erinnern, auf diese Antwort bezogen werden:
den Hörer einstellen ther Anforderung auf null sein kann, wenn Sie Hörer nicht festlegen möchten, klicken Sie für jeden Datensatz anzeigen, aber 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, während immer den Vorteil, smooth scrolling aufgrund Recycling, es dev Verantwortung ist es, die Ansichten zum Zurücksetzen (Löschen Bildansichten, Textansichten etc ..) und null des OnClickListener Einstellung usw.

2

Wenn Sie RecyclerView verwenden und OnClickListener s an jede Zeilenstammansicht binden, brauchen Sie sie nicht zu entfernen.

Aber wenn einige Ansichten Veranstaltung nicht reagieren sollte nur setOnClickListener(null)

Verwandte Themen