2016-02-11 13 views
11

Mam widok RecyclerView z działającym ItemTouchHelper. Wszystko działa świetnie, ale zastanawiam się, czy istnieje sposób, w jaki mogę odłączyć ItemTouchHelper od RecyclerView bez ponownego tworzenia listy? Dla zabawy, jest to kod używam dołączyć:Odłącz element ItemTouchHelper od RecyclerView

ItemTouchHelper.Callback callback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) 
{ 
    ... 
}; 
mItemTouchHelper = new ItemTouchHelper(callback); 
mItemTouchHelper.attachToRecyclerView(mPasswordList); 

Idealnie, chciałbym sprawdzić preferencje w powiedzmy onResume() działalności to RecyclerView mieszka i odłączyć ItemTouchHelper oparciu o to.

Odpowiedz

11

Moją początkową motywacją było umożliwienie użytkownikowi wyłączenia operacji przesunięcia na elementach listy, jeśli tak postanowią. Założę, że sposobem na to było odłączenie ItemTouchHelper od RecyclerView. Mam teraz okazało się, że ItemTouchHelper.SimpleCallback ma następującą metodę dostępną przesłonić:

@Override 
public boolean isItemViewSwipeEnabled() 
{ 
    return mSwipable; 
} 

Więc, wracając prawidłowy stan tutaj skutecznie wyłącza obsługę przeciągania. Mam nadzieję, że to pomoże komuś w przyszłości.

+3

zapisać mój dzień (..or mój tydzień). Dziękuję Ci! –

+0

Idealne rozwiązanie! –

12

można odłączyć ItemTouchHelper z RecyclerView ustawiając recyclerview null:

mItemTouchHelper.attachToRecyclerView(null); 
+0

Dobra sztuczka. Ale strzeż się tego ograniczenia: https://issuetracker.google.com/issues/37092256 Google twierdzi, że naprawili błąd. Jednak w chwili pisania tego komentarza poprawka nie jest jeszcze publicznie dostępna. –