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 metodoonMoved
devi aggiornare tutte le altre righe. Puoi usare ilfromPos
etoPos
per quello. Maggiori informazioni di seguito -
Quando riempi il tuo
RecyclerView
con i dati è necessario ordinarli tramiteorder
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:
- ottieni campo chiave primaria dell'elemento corrente (usando la posizione 4)
- modifica tutte le righe tra l'ordine 2 e ordina 4 :quindi cambia 2 -> 3 e 3 -> 4
- 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:
- ottieni campo chiave primaria dell'elemento corrente (usando la posizione 2)
- cambia tutte le righe tra l'ordine 2 e l'ordine 4:quindi cambia 4 -> 3 e 3 -> 2
- 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'