SQLite
 sql >> Database >  >> RDS >> SQLite

Memorizza la nuova posizione degli elementi RecyclerView in SQLite dopo essere stati trascinati e rilasciati

Hai bisogno di un campo in ogni riga del DB per memorizzare l'ordine. Quindi devi implementare queste funzionalità:

  • All'inserimento di una nuova riga (quando si inserisce un nuovo oggetto nel database) è necessario impostare l'ordine campo al prossimo int. Puoi ottenere il valore massimo corrente (con la funzione sql MAX ) e quindi fai semplicemente +1

  • Quando l'utente sposta un elemento in RecyclerView , nel metodo onMoved devi aggiornare tutte le altre righe. Puoi usare il fromPos e toPos per quello. Maggiori informazioni di seguito

  • Quando riempi il tuo RecyclerView con i dati è necessario ordinarli tramite order campo


Spiegazione della 2a funzionalità da implementare:in pratica devi aggiornare tutte le righe con l'ordine tra fromPos e toPos :

  • se l'utente ha spostato l'elemento in alto (ad esempio dalla posizione 4 alla 2), è necessario:

    1. ottieni campo chiave primaria dell'elemento corrente (usando la posizione 4)
    2. modifica tutte le righe tra l'ordine 2 e ordina 4 :quindi cambia 2 -> 3 e 3 -> 4
    3. Cambia l'ordine dell'oggetto corrente (usando la chiave primaria del primo punto) in toPos :in questo esempio cambia l'ordine dell'articolo corrente a 2
  • se l'utente ha spostato l'elemento in basso (ad esempio dalla posizione 2 alla 4) è necessario:

    1. ottieni campo chiave primaria dell'elemento corrente (usando la posizione 2)
    2. cambia tutte le righe tra l'ordine 2 e l'ordine 4:quindi cambia 4 -> 3 e 3 -> 2
    3. modifica l'ordine dell'oggetto corrente (usando la chiave primaria del primo punto) in toPos :in questo esempio cambia l'ordine dell'articolo corrente a 4


Spero che aiuti un po'