Potrzebujesz pola w każdym wierszu bazy danych do przechowywania zamówienia. Następnie musisz zaimplementować te funkcje:
-
Przy wstawianiu nowego wiersza (gdy wstawiasz nowy obiekt do bazy danych) musisz ustawić kolejność pole do następnego int. Możesz uzyskać aktualną wartość maksymalną (za pomocą funkcji sql
MAX
), a potem po prostu +1 -
Gdy użytkownik przeniesie element w
RecyclerView
, w metodzieonMoved
musisz zaktualizować wszystkie pozostałe wiersze. Możesz użyćfromPos
itoPos
za to. Więcej na ten temat poniżej -
Kiedy wypełnisz swój
RecyclerView
z danymi, które musisz zamówić przezorder
pole
Wyjaśnienie drugiej funkcji, która ma zostać zaimplementowana:w zasadzie musisz zaktualizować wszystkie wiersze z kolejnością między fromPos
i toPos
:
-
jeśli użytkownik przeniósł element w górę (na przykład z pozycji 4 na 2), należy:
- Pobierz pole klucza głównego bieżącego elementu (używając pozycji 4)
- zmień wszystkie wiersze między kolejnością 2 i zamów 4 :więc zmień 2 -> 3 i 3 -> 4
- Zmień bieżącą kolejność pozycji (przy użyciu klucza podstawowego pierwszego punktu) na
toPos
:w tym przykładzie zmień bieżącą kolejność pozycji na 2
-
jeśli użytkownik przeniósł element w dół (na przykład z pozycji 2 do 4), należy:
- Pobierz pole klucza głównego bieżącego elementu (używając pozycji 2)
- zmień wszystkie wiersze między porządkiem 2 a porządkiem 4:więc zmień 4 -> 3 i 3 -> 2
- zmień bieżącą kolejność pozycji (przy użyciu klucza podstawowego pierwszego punktu) na
toPos
:w tym przykładzie zmień bieżącą kolejność pozycji na 4
Mam nadzieję, że to trochę pomoże