Ho usato la libreria SwipeToDismiss ma ora sto provando a migrare a RecyclerView e le cose non sono così ovvie, conosci qualche sostituzione per questa libreria? Qualche idea su come implementarlo da zero?Scorri verso Dismiss per RecyclerView
risposta
A partire dalla v22.2.0, il team di supporto Android ha incluso una classe ItemTouchHelper
che rende lo scorrimento a trascinamento e il trascinamento della selezione piuttosto semplice. Questo potrebbe non essere completo come alcune delle librerie là fuori, ma viene direttamente dal team di Android.
Aggiornare il build.gradle per importare v22.2. + Della biblioteca RecyclerView
compile 'com.android.support:recyclerview-v7:22.2.+'
istanziare un ItemTouchHelper con un appropriato 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);
** Si noti che il SimpleCallback accetta le indicazioni che si desidera abilitare il trascinamento e le direzioni che si desidera abilitare il trascinamento.
allegare al RecyclerView
itemTouchHelper.attachToRecyclerView(recyclerView);
Come si può ottenere un indice di articoli swiped? – Orochi
@Orochi Chiamando [getAdapterPosition()] (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#getAdapterPosition%28%29) su 'viewHolder'. – SqueezyMo
Ciao ragazzi! E come posso raggiungere getAdapterPosition() dall'attività? Il viewHolder è sul mio adapter e non so come ottenere la posizione View che sto girando da ItemTouchHelper. Dovevo farlo sul supporto di Adapter? Come? PS: Sentiti libero di chiedere di spostare questa come una nuova domanda. –
Forse si potrebbe provare questa libreria:
https://github.com/daimajia/AndroidSwipeLayout
Aggiornamento: ho appena trovato un altro buon libreria che è possibile utilizzare con RecyclerView:
Ho realizzato la mia implementazione simile a https://github.com/krossovochkin/Android -SwipeToDismiss-RecyclerView. L'unico requisito era mostrare Toast con il pulsante "Annulla", che non è coperto nella tua lib. –
La libreria da Daimajia non supporta la funzione di scorrimento verso il basso. – akohout
@raveN ho appena aggiornato la mia risposta. –
This library possono essere utile.È possibile implementare undo
in OnDissmiss
utilizzare supertoast
Ehi, ho intenzione di provarlo! Si basa su quello che risponde Pierpaolo? – Boy
È solo un 'OnTouchListener' ispirato da [questo] (https://github.com/romannurik/Android-SwipeToDismiss) – codefalling
ho scritto SwipeToDeleteRV libreria che supporta colpo-to-delete-annullare funzione sulle viste riciclatore. È basato su ItemTouchHelper e molto facile da usare.
Spero che possa essere utile per qualcuno che si trova ad affrontare gli stessi problemi.
A titolo di esempio, è possibile definire la visualizzazione riciclatore in un layout XML come normale, oltre ad alcuni attributi opzionali:
...
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"/>
Tutti gli attributi stdrv sono opzionali. Se non li si specifica, verranno utilizzati quelli predefiniti.
Quindi creare un adattatore che sottoclassi STDAdapter, assicurarsi di chiamare il costruttore super-classe. Qualcosa di simile a questo:
public class SampleAdapter extends STDAdapter<String> {
public SampleAdapter(List<String> versionList) {
super(versionList);
}
}
Avanti assicurarsi che si effettua una chiamata al metodo setupSwipeToDelete
per impostare il colpo-to-delete funzione up.
mRecyclerView.setupSwipeToDelete(your_adapter_instance, swipe_directions);
swipe_directions
è la direzione si consente elementi da fregato.
Esempio:
// 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);
Questo è tutto! Per le impostazioni più avanzate (ad esempio, impostare diversi messaggi di eliminazione per elementi diversi, rimuovere temporaneamente e definitivamente gli elementi, ...) fare riferimento alla pagina di lettura del progetto.
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
Qui in codice se strisciare utente a sinistra poi AlertDialog viene visualizzato e se l'utente selezionare REMOVE quindi elemento viene eliminato dal database e recyclerview viene aggiornato e se l'utente seleziona Annulla allora recyclerview è come è.
- 1. RecyclerView - Scorri verso la posizione non funziona ogni volta
- 2. LibGDX - Scorri verso l'alto o scorri verso destra ecc.?
- 3. UITableView "Scorri verso il basso per aggiornare"
- 4. Scorri più RecyclerView orizzontale insieme
- 5. Scorri RecyclerVisualizza quando lo fai scorrere verso l'alto o fai scorrere verso il basso il recyclerview verso il basso
- 6. Scorri e eventi OnClick in RecyclerView
- 7. Android WebBrowser scorri verso il basso pagina
- 8. iOS 8 UITableViewRowAction: scorri verso sinistra, immagini?
- 9. Elenco di Android, scorri verso l'azione
- 10. Scorri verso sinistra i gesti su UITextField
- 11. RecyclerView che non scorre verso il basso
- 12. ASP.NET: scorri per controllare
- 13. Scorri verso il basso fino a un elemento con rapportatore
- 14. Disattiva Scorri verso l'alto dopo il punto in Pagina
- 15. Hammer js - Chiudi menu scorri verso destra - scorrimento verticale interferente
- 16. iOS: scorri verso sinistra/destra tra le schede possibili?
- 17. Scorri verso il basso nella casella di chat in angularjs
- 18. jQuery - Scorri l'elemento verso il centro dello schermo anziché verso l'alto con un collegamento di ancoraggio
- 19. L'elemento della vista elenco fa scorrere verso sinistra e scorri verso destra?
- 20. Swift - Can not Dismiss MPMoviePlayerViewController
- 21. Scorri verso sinistra o verso destra in qualsiasi punto di un UITableViewCell per eliminare la cella senza il pulsante Elimina?
- 22. Usa ItemTouchHelper per Swipe-to-Dismiss con un'altra vista visualizzata dietro lo swiped
- 23. RecyclerView aggiorna le voci solo quando si scorre verso il basso e verso l'alto
- 24. Collega TextView a RecyclerView
- 25. Scorri per eliminare
- 26. Scorri per cambiare visualizzazione
- 27. Scorri per eliminare UITableView
- 28. Android - Swipe per eliminare RecyclerView
- 29. Determina quale VISTA in più viste ha un gesto (doppio clic, scorri a sinistra, scorri verso destra, ecc.)?
- 30. Scorri UITextView To Bottom
Ho creato una piccola libreria che utilizza ItemTouchHelper per semplificare la creazione di gesti per recyclerview, puoi trovarlo qui github.com/olmur/rvtools –