studio recyclerview hacer desplegable context como android android-recyclerview

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.




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á.