hacer - recyclerview desplegable android
Deslizar para descartar RecyclerView (5)
A partir de v22.2.0, el equipo de soporte de Android ha incluido una clase
ItemTouchHelper
que hace que deslizar para descartar y arrastrar y soltar sea bastante simple.
Puede que esto no sea tan completo como algunas de las bibliotecas disponibles, pero proviene 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.+''
-
Instanciar 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 que desea habilitar arrastrar y soltar y las direcciones que desea habilitar deslizar.
-
Adjuntar a su RecyclerView
itemTouchHelper.attachToRecyclerView(recyclerView);
Solía SwipeToDismiss biblioteca SwipeToDismiss , 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 cero?
Escribí la biblioteca SwipeToDeleteRV que admite la función de deslizar para eliminar-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, más 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 los especifica, se usarían 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<String> {
public SampleAdapter(List<String> versionList) {
super(versionList);
}
}
A continuación, asegúrese de realizar una llamada al método
setupSwipeToDelete
para configurar la función deslizar para eliminar.
mRecyclerView.setupSwipeToDelete(your_adapter_instance, swipe_directions);
swipe_directions
es la dirección en la que permite
swipe_directions
los elementos.
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, configurar diferentes mensajes de eliminación para diferentes elementos, eliminar elementos temporal y permanentemente, ...), consulte la página del archivo Léame.
tal vez podrías probar esta biblioteca:
https://github.com/daimajia/AndroidSwipeLayout
Actualización: acabo de encontrar otra buena biblioteca que puede usar con RecyclerView:
Esta biblioteca
puede ser
OnDissmiss
. Puede implementar
undo
en
OnDissmiss
use
supertoast
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, se muestra AlertDialog y si el usuario selecciona ELIMINAR, el elemento se elimina de la base de datos y la vista de reciclaje se actualiza y si el usuario selecciona CANCELAR, entonces la vista de reciclaje está como está.