Deslizar para descartar para RecyclerView

Utilizaba la biblioteca de SwipeToDismiss pero ahora estoy intentando emigrar a RecyclerView y las cosas no son tan obvias, ¿sabes algún reemplazo para este lib? ¿Alguna idea de cómo implementarlo desde cero?

A partir de v22.2.0, el equipo de soporte de Android ha incluido una clase ItemTouchHelper que hace deslizar-a-descartar y arrastrar y soltar bastante simple. Esto puede no ser tan completo como algunas de las bibliotecas, pero viene directamente del equipo de Android.

  • Actualice su build.gradle para importar v22.2. + De la biblioteca RecyclerView

     compile 'com.android.support:recyclerview-v7:22.2.+' 
  • Instantiate un ItemTouchHelper con un SimpleCallback apropiado

     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); 

    ** Tenga en cuenta que el SimpleCallback toma las direcciones que desea activar arrastrar y soltar y las direcciones que desea habilitar el deslizamiento.

  • Adjuntar a su 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 

Aquí en el código si el usuario desliza a la izquierda entonces AlertDialog se muestra y si el usuario selecciona REMOVE, entonces el elemento se elimina de la base de datos y recyclerview se actualiza y si el usuario selecciona CANCELAR, entonces recyclerview es tal cual.

Tal vez podrías probar esta biblioteca:

https://github.com/daimajia/AndroidSwipeLayout

Actualización: Acabo de encontrar otra buena biblioteca que puede utilizar con RecyclerView:

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

Esta biblioteca puede ser OnDissmiss . Puede implementar undo en OnDissmiss use supertoast

Escribí la biblioteca de SwipeToDeleteRV que apoya la función de deshacer-suprimir-deshacer en las vistas de reciclador. Se basa en ItemTouchHelper y es muy fácil de usar.

Espero que pueda ser útil para alguien que enfrenta los mismos problemas.

Como ejemplo, puede definir su vista de reciclador en un diseño XML como normal, además de algunos atributos opcionales:

 ... 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"/> 

Todos los atributos stdrv son opcionales. Si no las especifica, se utilizarán las predeterminadas.

A continuación, cree un adaptador que subclases STDAdapter, asegúrese de llamar al constructor superclase. Algo como esto:

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

}

A continuación, asegúrese de hacer una llamada al método setupSwipeToDelete para configurar la función de borrado a borrado.

 mRecyclerView.setupSwipeToDelete(your_adapter_instance, swipe_directions); 

swipe_directions es la dirección en la que se permite que los elementos se deslicen.

Ejemplo:

 // 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); 

¡Eso es! Para más ajustes avanzados (es decir, fijar diversos mensajes de la cancelación para diversos artículos, quitar temporalmente y permanentemente artículos, …) refiera por favor a la página del readme del proyecto.

  • Desactivar desplazamiento para posición en RecyclerView utilizando ItemTouchHelper.SimpleCallback
  • ¿Cómo puedo hacer que RecyclerView actualice su diseño?
  • Actualizar la barra de progreso en Recyclerview
  • Agregue una vista dinámicamente al elemento del RecyclerView
  • Cómo obtener un desplazamiento en RecyclerView ItemDecorator
  • Cómo obtener el elemento del adaptador RecyclerView en Android
  • RecyclerView & SnapHelper -> obtener una vista rápida / segmentada
  • RecyclerVista la lista con los artículos con los límites en un ángulo, no horizontal
  • Android - Cómo detener la recarga de imágenes en Recyclerview al desplazarse
  • ¿Cómo se relaciona la posición de un adaptador de RecyclerView con el índice de su conjunto de datos?
  • Transición de elemento compartido en RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.