Desliza el dedo para despedir a RecyclerView

Solía SwipeToDismiss library pero ahora estoy tratando de migrar a RecyclerView y las cosas no son tan obvias, ¿conoces algún reemplazo para esta lib? ¿Alguna idea de cómo implementarlo desde el principio?

A partir de v22.2.0, el equipo de soporte de Android ha incluido una clase ItemTouchHelper que hace que deslizar para ItemTouchHelper y arrastrar y soltar sea bastante simple. Puede que no sea 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.+' 
  • Crear una instancia de 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 SimpleCallback toma las direcciones en las que desea habilitar el método de arrastrar y soltar y las direcciones que desea habilitar para deslizar.

  • Adjunte 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 Código si el usuario desliza hacia la izquierda, entonces se muestra AlertDialog y si el usuario selecciona REMOVE, el elemento se borra de la base de datos y la vista recyclerview se actualiza y si el usuario selecciona CANCELAR, entonces recyclerview está como está.

tal vez podrías probar esta biblioteca:

https://github.com/daimajia/AndroidSwipeLayout

Actualización: Acabo de encontrar otra buena biblioteca que puedes usar 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 SwipeToDeleteRV que admite la función de deslizar para eliminar y deshacer en las vistas de reciclado. Está basado 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 de forma normal, más algunos atributos opcionales:

 ... xmlns:stdrv="http://schemas.android.com/apk/res-auto" ...  

Todos los atributos de stdrv son opcionales. Si no los especifica, se usarán los predeterminados.

Luego, cree un adaptador que subclasifique STDAdapter, asegúrese de llamar al constructor de la superclase. Algo como esto:

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

}

A continuación, asegúrese de realizar una llamada al método setupSwipeToDelete para configurar la función de deslizar para borrar.

 mRecyclerView.setupSwipeToDelete(your_adapter_instance, swipe_directions); 

swipe_directions es la dirección en la que permite que se swipe_directions los artículos.

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 configuraciones más avanzadas (es decir, establecer diferentes mensajes de eliminación para diferentes elementos, eliminar elementos de forma temporal y permanente, …) consulte la página de lectura del proyecto.