Kiedyś korzystałem z biblioteki SwipeToDismiss, ale teraz próbuję migrować do RecyclerView i sprawy nie są takie oczywiste, czy znasz jakieś zamienniki tej biblioteki? Jakieś pomysły jak zrealizować to od podstaw?
android
android-recyclerview
Viktor Yakunin
źródło
źródło
Odpowiedzi:
Począwszy od wersji 22.2.0, zespół pomocy technicznej Androida zawiera
ItemTouchHelper
klasę, która sprawia, że przeciąganie w celu odrzucenia oraz przeciąganie i upuszczanie jest całkiem proste. Może nie być tak w pełni funkcjonalny, jak niektóre biblioteki, ale pochodzi bezpośrednio od zespołu Androida.Zaktualizuj plik build.gradle, aby zaimportować wersję 22.2. + Biblioteki RecyclerView
Utwórz wystąpienie ItemTouchHelper z odpowiednim SimpleCallback
** Zwróć uwagę, że SimpleCallback przyjmuje kierunki, w których chcesz włączyć funkcję przeciągania i upuszczania, oraz kierunki, w których chcesz włączyć przesuwanie.
Dołącz do swojego RecyclerView
źródło
viewHolder
.Tutaj w kodzie, jeśli użytkownik przesunie palcem w lewo, zostanie wyświetlony komunikat AlertDialog, a jeśli użytkownik wybierze opcję USUŃ, element zostanie usunięty z bazy danych, a przegląd recyklingu zostanie odświeżony, a jeśli użytkownik wybierze opcję ANULUJ, widok programu recyklingowego jest taki, jaki jest.
źródło
if (direction == ItemTouchHelper.LEFT) // if swipe left
ponieważItemTouchHelper.SimpleCallback
jest on ograniczony tylko do tego kierunku przesunięcia. Jeśli chcesz przesunąć w lewo i w prawo, wtedyItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)
musisz sprawdzić kierunek.AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // stuff to put the item back } });
adapter.notifyItemChanged(position);
przyniosłem przesunięty przedmiot z powrotem, a nienotifyItemRemoved
- co jest bardziej logiczne imho.może mógłbyś wypróbować tę bibliotekę:
https://github.com/daimajia/AndroidSwipeLayout
Aktualizacja: właśnie znalazłem kolejną dobrą bibliotekę, której możesz używać z RecyclerView:
https://github.com/hudomju/android-swipe-to-dismiss-undo
źródło
Ta biblioteka może być pomocna.Możesz zaimplementować
undo
wOnDissmiss
użyciusupertoast
źródło
OnTouchListener
inspirować przez toNapisałem bibliotekę SwipeToDeleteRV, która obsługuje funkcję przeciągnij, aby usunąć i cofnąć w widokach recyklera. Opiera się na ItemTouchHelper i jest bardzo łatwy w użyciu.
Mam nadzieję, że może to być pomocne dla kogoś, kto ma te same problemy.
Na przykład możesz zdefiniować widok recyklera w układzie XML jako normalny, plus kilka opcjonalnych atrybutów:
Wszystkie atrybuty stdrv są opcjonalne. Jeśli ich nie określisz, zostaną użyte domyślne.
Następnie utwórz adapter, który jest podklasą STDAdapter, upewnij się, że wywołujesz konstruktora superklasy. Coś takiego:
}
Następnie upewnij się, że wywołałeś
setupSwipeToDelete
metodę, aby ustawić funkcję przeciągnij, aby usunąć.swipe_directions
to kierunek, w którym możesz przesuwać elementy.Przykład:
Otóż to! Bardziej zaawansowane ustawienia (np. Ustawianie różnych komunikatów o usuwaniu różnych elementów, tymczasowe i trwałe usuwanie elementów, ...) można znaleźć na stronie Readme projektu.
źródło