sql >> Databasteknik >  >> RDS >> SQLite

Lagra ny position för RecyclerView-objekt i SQLite efter att ha dragits och släppts

Du behöver ett fält i varje DB-rad för att lagra beställningen. Sedan måste du implementera dessa funktioner:

  • Vid infogning av ny rad (när du infogar ett nytt objekt i databasen) måste du ställa in ordningen fältet till nästa int. Du kan få det aktuella maxvärdet (med sql-funktionen MAX ) och sedan helt enkelt +1

  • När användaren flyttar ett objekt i RecyclerView , i metoden onMoved du måste uppdatera alla andra rader. Du kan använda fromPos och toPos för det. Mer om det nedan

  • När du fyller i din RecyclerView med data du behöver för att beställa dem genom order fältet


Förklaring av den andra funktionen som ska implementeras:i grund och botten måste du uppdatera alla rader i ordning mellan fromPos och toPos :

  • om användaren flyttade objektet uppåt (till exempel från position 4 till 2), måste du:

    1. hämta primärnyckelfält för aktuellt objekt (med position 4)
    2. ändra alla rader mellan order 2 och beställ 4 :så ändra 2 -> 3 och 3 -> 4
    3. Ändra aktuell artikelordning (med primärnyckeln för första punkten) till toPos :i detta exempel ändra aktuell artikelordning till 2
  • om användaren flyttade objektet nedåt (till exempel från position 2 till 4) måste du:

    1. hämta primärnyckelfält för aktuellt objekt (med position 2)
    2. ändra alla rader mellan ordning 2 och ordning 4:så ändra 4 -> 3 och 3 -> 2
    3. ändra aktuell artikelordning (med primärnyckeln för första punkten) till toPos :i det här exemplet ändra aktuell artikelordning till 4


Hoppas det hjälper lite




  1. Hur man byter namn på tabell i MySQL

  2. Beräknar procentsatser med GROUP BY-fråga

  3. Hur utför man IF-satsen i SQL?

  4. Hur tar man bort mysql-raden efter tiden?