Раньше я использовал библиотеку SwipeToDismiss, но теперь я пытаюсь перейти на RecyclerView, и все не так очевидно, знаете ли вы какие-нибудь замены для этой библиотеки? Есть идеи, как реализовать это с нуля?
android
android-recyclerview
Виктор Якунин
источник
источник
Ответы:
Начиная с версии 22.2.0, группа поддержки Android включила
ItemTouchHelper
класс, который упрощает удаление и перетаскивание смахивания. Это может быть не так полнофункционально, как некоторые из существующих библиотек, но оно исходит непосредственно от команды Android.Обновите build.gradle, чтобы импортировать v22.2. + Библиотеки RecyclerView.
Создайте экземпляр ItemTouchHelper с соответствующим SimpleCallback
** Обратите внимание, что SimpleCallback принимает направления, в которых вы хотите включить перетаскивание, и направления, которые вы хотите включить.
Присоединитесь к вашему RecyclerView
источник
viewHolder
.Здесь, в коде, если пользователь проведет пальцем влево, отобразится AlertDialog, и если пользователь выберет УДАЛИТЬ, то элемент будет удален из базы данных, а recyclerview будет обновлен, а если пользователь выберет CANCEL, то recyclerview будет таким, как есть.
источник
if (direction == ItemTouchHelper.LEFT) // if swipe left
какItemTouchHelper.SimpleCallback
она ограничена только этим направлением смахивания. Если вы хотите смахивать влево и вправо, тогдаItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT)
вам нужно будет проверить направление.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);
вернул пройденный элемент, а неnotifyItemRemoved
- что более логично, imho.возможно, вы могли бы попробовать эту библиотеку:
https://github.com/daimajia/AndroidSwipeLayout
Обновление: я только что нашел еще одну хорошую библиотеку, которую вы можете использовать с RecyclerView:
https://github.com/hudomju/android-swipe-to-dismiss-undo
источник
Эта библиотека может быть полезной. Вы можете реализовать
undo
вOnDissmiss
использованииsupertoast
источник
OnTouchListener
вдохновляют на этомЯ написал библиотеку SwipeToDeleteRV, которая поддерживает функцию смахивания для удаления и отмены в представлениях ресайклера. Он основан на ItemTouchHelper и очень прост в использовании.
Надеюсь, это может быть полезно для кого-то, кто сталкивается с такими же проблемами.
Например, вы можете определить свое обычное представление ресайклера в XML-макете, плюс некоторые дополнительные атрибуты:
Все атрибуты stdrv необязательны. Если вы не укажете их, будут использоваться значения по умолчанию.
Затем создайте адаптер, который является подклассом STDAdapter, убедитесь, что вы вызываете конструктор суперкласса. Что-то вроде этого:
}
Затем убедитесь, что вы вызываете
setupSwipeToDelete
метод для установки функции удаления смахивания вверх.swipe_directions
- это направление, в котором разрешается перемещать элементы.Пример:
Это оно! Для дополнительных настроек (например, установка разных сообщений об удалении для разных элементов, временное и окончательное удаление элементов, ...), пожалуйста, обратитесь к странице readme проекта.
источник