2015-11-21 7 views
8

Używam RecyclerViews w moim projekcie aplikacji i ustawienie OnClickListeners z ich ViewHolders (w ich konstruktorach jak wspomniano w StackOverflow Q&A).Jak mogę usunąć OnClickListeners z ViewHolders RecyclerView, gdy są one usuwane?

Następnie mam to pytanie: Jak mogę usunąć OnClickListeners z ViewHolders RecyclerView's, gdy są one usuwane.

Zazwyczaj możemy usunąć OnClickListener w ten sposób:

view.setOnClickListener(null); 

A jeśli jest PagerAdapter danej ViewPager, możemy to zrobić w destroyItem metody.

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

Gdzie mogę to zrobić z RecyclerView? - Albo, nie muszę tego robić?

+1

I don wydaje Ci się, że musisz ustawić odbiornik kliknięć na wartość null. Callback powinien zostać odebrany przez garbage collector, gdy widok jest zutylizowany. Ponadto, gdyby oczekiwano, że to zrobimy, oczekiwałbym obecności metody removeOnClicklistener. – cYrixmorten

Odpowiedz

14

Jeśli chcesz ustawić onCLickListener null() z widokiem RecyclerView.Adapter gdy widok gaśnie ekran, można zrobić więc przesłonięcie http://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#onViewDetachedFromWindow(VH) w adapterze RecyclerView. Otrzymasz uchwyt jako parametr, który właśnie zniknął z ekranu. Możesz null ustawić onClickListener dowolnego widoku dostępnego w tym posiadaczu.

Lub jeśli chcesz zrobić to samo, gdy stanie się widoczne na ekranie, możesz to zrobić w onBindViewHolder(). Ale to nie ma sensu, ponieważ zamiast tego można uniknąć ustawienia słuchacza.

Punkty do zapamiętania, podobne do tej odpowiedzi:
Ustawianie słuchacza na null może być wymóg ther gdy nie chcesz, aby ustawić kliknij słuchacza aby dla każdego zbioru danych, ale tylko kilka z nich. W takim przypadku zawsze lepiej jest ustawić odsłuchiwanie na null, kiedy i po wyjściu z ekranu. W przeciwnym razie, gdy RecyclerView ponownie użyje (odtworzy) obiekty posiadacza, które zniknęły, aby przedstawić nowy zestaw danych, który staje się widoczny. W tym procesie zestaw danych (widok w posiadaczu), w którym nie ustawiono detektora, może mieć ustawionego słuchacza z powodu recyklingu.

W sumie, podczas gdy coraz zaletę płynnego przewijania na skutek recyklingu, to odpowiedzialność za Dev, ażeby poglądy (kasowanie obrazów widoki, widoki tekstowe itp ..) oraz NULL ustawienie na onCLickListener itp

2

Jeśli używasz RecyclerView i wiążę OnClickListener s do każdego widoku głównego wiersza, nie ma potrzeby ich usuwania.

Ale jeśli niektóre poglądy nie powinny reagować na zdarzenie kliknij po prostu użyć setOnClickListener(null)

Powiązane problemy