Intereting Posts

Проведите по экрану для RecyclerView

Я использовал для библиотеки SwipeToDismiss, но теперь я пытаюсь перейти на RecyclerView, и все не так очевидно, знаете ли вы какие-либо замены для этой библиотеки? Любые идеи, как реализовать его с нуля?

Solutions Collecting From Web of "Проведите по экрану для RecyclerView"

Начиная с версии 22.2.0 группа поддержки Android включала класс ItemTouchHelper который упрощает прокрутку и перетаскивание. Возможно, это не так полно, как некоторые из библиотек, но это происходит непосредственно из команды Android.

  • Обновите файл build.gradle для импорта v22.2. + Библиотеки RecyclerView

     compile 'com.android.support:recyclerview-v7:22.2.+' 
  • Создайте экземпляр ItemTouchHelper с помощью соответствующего SimpleCallback

     ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { [...] @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) { //Remove swiped item from list and notify the RecyclerView } }; ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); 

    ** Обратите внимание, что SimpleCallback принимает указания, которые вы хотите включить перетаскивание и направления, которые вы хотите включить.

  • Прикрепите к вашему RecyclerView

     itemTouchHelper.attachToRecyclerView(recyclerView); 
  ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) { @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { return false; } @Override public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) { final int position = viewHolder.getAdapterPosition(); //get position which is swipe if (direction == ItemTouchHelper.LEFT) { //if swipe left AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); //alert for confirm to delete builder.setMessage("Are you sure to delete?"); //set message builder.setPositiveButton("REMOVE", new DialogInterface.OnClickListener() { //when click on DELETE @Override public void onClick(DialogInterface dialog, int which) { adapter.notifyItemRemoved(position); //item removed from recylcerview sqldatabase.execSQL("delete from " + TABLE_NAME + " where _id='" + (position + 1) + "'"); //query for delete list.remove(position); //then remove item return; } }).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { //not removing items if cancel is done @Override public void onClick(DialogInterface dialog, int which) { adapter.notifyItemRemoved(position + 1); //notifies the RecyclerView Adapter that data in adapter has been removed at a particular position. adapter.notifyItemRangeChanged(position, adapter.getItemCount()); //notifies the RecyclerView Adapter that positions of element in adapter has been changed from position(removed element index to end of list), please update it. return; } }).show(); //show alert dialog } } }; ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback); itemTouchHelper.attachToRecyclerView(recyclerView); //set swipe to recylcerview 

Здесь, в коде, если пользователь прокручивается влево, отображается AlertDialog, и если пользователь выбирает REMOVE, тогда элемент удаляется из базы данных, а recyclerview обновляется, и если пользователь выбирает CANCEL, то recyclerview выглядит так, как есть.

Возможно, вы могли бы попробовать эту библиотеку:

https://github.com/daimajia/AndroidSwipeLayout

Обновление: я только что нашел еще одну хорошую библиотеку, которую вы можете использовать с RecyclerView:

https://github.com/hudomju/android-swipe-to-dismiss-undo

Эта библиотека может быть полезна. Вы можете реализовать undo использования supertoast

Я написал библиотеку SwipeToDeleteRV, которая поддерживает функцию отладки -удаления-отмены на просмотрах recycler. Он основан на ItemTouchHelper и очень прост в использовании.

Надеюсь, что это может быть полезно для тех, кто сталкивается с теми же проблемами.

В качестве примера вы можете определить представление recycler в XML-макете как обычно, а также некоторые необязательные атрибуты:

 ... xmlns:stdrv="http://schemas.android.com/apk/res-auto" ... <io.huannguyen.swipetodeleterv.STDRecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" stdrv:border_color="@android:color/darker_gray" // specify things like border color, border width, etc. stdrv:delete_view_background="#cccccc" stdrv:delete_icon="@drawable/ic_archive" stdrv:delete_icon_height="24dp" stdrv:delete_icon_width="24dp" stdrv:left_delete_icon_margin="32dp" stdrv:delete_message="@string/delete_message" stdrv:right_delete_icon_margin="32dp" stdrv:delete_icon_color="#000000" stdrv:has_border="true"/> 

Все атрибуты stdrv являются необязательными. Если вы не укажете их, будут использоваться значения по умолчанию.

Затем создайте адаптер, который подклассифицирует STDAdapter, убедитесь, что вы вызываете конструктор суперкласса. Что-то вроде этого:

 public class SampleAdapter extends STDAdapter<String> { public SampleAdapter(List<String> versionList) { super(versionList); } 

}

Затем убедитесь, что вы делаете вызов метода setupSwipeToDelete чтобы установить функцию удаления из setupSwipeToDelete .

 mRecyclerView.setupSwipeToDelete(your_adapter_instance, swipe_directions); 

swipe_directions – это направление, в котором вы разрешаете элементы.

Пример:

 // Get your recycler view from the XML layout mRecyclerView = (STDRecyclerView) findViewById(R.id.recycler_view); LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); mRecyclerView.setLayoutManager(layoutManager); mAdapter = new SampleAdapter(versions); // allow swiping in both directions (left-to-right and right-to-left) mRecyclerView.setupSwipeToDelete(mAdapter, ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT); 

Это оно! Для более продвинутых настроек (например, для установки разных сообщений об удалении для разных элементов, временного и постоянного удаления элементов …), пожалуйста, обратитесь к странице просмотра проекта.