Vous avez besoin d'un champ dans chaque ligne de la base de données pour stocker la commande. Ensuite, vous devez implémenter ces fonctionnalités :
-
Lors de l'insertion d'une nouvelle ligne (lorsque vous insérez un nouvel objet dans la base de données), vous devez définir l'ordre champ à l'entier suivant. Vous pouvez obtenir la valeur maximale actuelle (avec la fonction sql
MAX
) puis faites simplement +1 -
Lorsque l'utilisateur déplace un élément dans
RecyclerView
, dans la méthodeonMoved
vous devez mettre à jour toutes les autres lignes. Vous pouvez utiliser lefromPos
ettoPos
pour ça. Plus d'informations ci-dessous -
Lorsque vous remplissez votre
RecyclerView
avec les données dont vous avez besoin pour les commander parorder
champ
Explication de la 2ème fonctionnalité à implémenter :en gros, vous devez mettre à jour toutes les lignes dans l'ordre entre fromPos
et toPos
:
-
si l'utilisateur a déplacé l'élément vers le haut (par exemple de la position 4 à la position 2), vous devez :
- obtenir le champ de clé primaire de l'élément actuel (en utilisant la position 4)
- modifier toutes les lignes entre la commande 2 et commandez 4 :donc changer 2 -> 3 et 3 -> 4
- Modifier l'ordre actuel des articles (en utilisant la clé primaire du premier point) en
toPos
:dans cet exemple, changez l'ordre actuel des articles en 2
-
si l'utilisateur a déplacé l'élément vers le bas (par exemple de la position 2 à 4), vous devez :
- obtenir le champ de clé primaire de l'élément actuel (en utilisant la position 2)
- changer toutes les lignes entre l'ordre 2 et l'ordre 4 :donc changer 4 -> 3 et 3 -> 2
- modifier l'ordre actuel des articles (en utilisant la clé primaire du premier point) en
toPos
:dans cet exemple, changez l'ordre actuel des articles en 4
J'espère que ça aide un peu