SQLite
 sql >> Base de données >  >> RDS >> SQLite

Stocker la nouvelle position des éléments RecyclerView dans SQLite après avoir été glissés et déposés

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éthode onMoved vous devez mettre à jour toutes les autres lignes. Vous pouvez utiliser le fromPos et toPos pour ça. Plus d'informations ci-dessous

  • Lorsque vous remplissez votre RecyclerView avec les données dont vous avez besoin pour les commander par order 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 :

    1. obtenir le champ de clé primaire de l'élément actuel (en utilisant la position 4)
    2. modifier toutes les lignes entre la commande 2 et commandez 4 :donc changer 2 -> 3 et 3 -> 4
    3. 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 :

    1. obtenir le champ de clé primaire de l'élément actuel (en utilisant la position 2)
    2. changer toutes les lignes entre l'ordre 2 et l'ordre 4 :donc changer 4 -> 3 et 3 -> 2
    3. 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