Hallo!
Meiner Meinung nach ist das recht simpel. Wie du schon geschrieben hast, musst du jedem Datensatz (eine Zeile/Row) eine eigene aufsteigende ID verpassen, welche in ihrem Aufstieg die Sortierung (Reihenfolge) wiedergibt. Wenn du jetzt einen Satz an eine andere Stelle verschiebst, dann wird nicht tatsächlich die eigentliche Zeile verschoben, sondern die zu verschiebende Zeile ausgelesen, gelöscht, die IDs der darüber oder drunter liegenden Rows (ich nenne es (Daten)Sätze) angepasst und dann die Zeile mit der neuen ID in die DB geschrieben:
1. Den zu verschiebenden Satz zwischenspeichern (also in ein Hilfsarray oder Hilfsobjekt einlesen)
2. Diesen Satz aus der Tabelle löschen
3. Die Sätze zwischen der Quell-ID (der zu verschiebende Satz) und der Ziel-ID (da, wo der Satz hin soll), entsprechend anpassen, sprich, deren ID ändern
4. In deinem zwischengespeicherten Satz die ID auf die neue ID ändern
5. Den zwischengespeicherten Satz mit neuer ID in die DB schreiben
Beispiel(tabelle):
ID | Nr | Text
1 | 1 | Hallo
2 | 2 | Tag
3 | 3 | Wetter
4 | 4 | Sonne
5 | 5 | Regen
6 | 6 | Wind
7 | 7 | Hagel
8 | 8 | Sturm
Wenn man jetzt den Satz (2 |2 | Tag) an die Stelle 6 verschieben möchtest, dann sieht das so aus:
1. Den Satz mit der ID 2 aus der Tabelle auslesen und zwischenspeichen
2. Den Satz mit der ID 2 aus der Tabelle löschen
3. Mit einer Schleife aus allen Sätzen ab ID 3 bis ID 6 die IDs auslesen, um eins verringen und die IDs entsprechend neu in die Sätze schreiben. Aus Satz 3 wird dann 2, aus 4 dann 3, aus 5 wird 4 und aus 6 wird dann 5. Die neue Zwischen-Tabelle sieht zu diesem Zeitpunkt dann so aus:
ID | Nr | Text
1 | 1 | Hallo
2 | 3 | Wetter
3 | 4 | Sonne
4 | 5 | Regen
5 | 6 | Wind
7 | 7 | Hagel
8 | 6 | Sturm
Der Satz mit der ID 6 fehlt hier, da er ja die ID 5 bekommen hat, usw. Weiter geht es dann so:
4. Die ID des zwischengespeicherten Satzes änderst du nun auf die Ziel-ID, sprich, auf 6 ab.
5. Dann schreibst du den zwischengespeicherten Satz komplett in die Datenbank. Die Tabelle sieht dann so aus:
ID | Nr | Text
1 | 1 | Hallo
2 | 3 | Wetter
3 | 4 | Sonne
4 | 5 | Regen
5 | 6 | Wind
6 | 2 | Tag
7 | 7 | Hagel
8 | 6 | Sturm
Die Werte des Satzes (sprich, Nr und Text) sind unverändert. Nur die IDs haben sich verändert. Man muss halt immer nur schauen, dass man die IDs bei allen Sätzen zwischen den zu verschiebenden Satz und der Ziel-Stelle an die neue Sortierung anpasst. Wenn man eine Zeile nach unten verschiebt, werden alle IDs zwischen Quell- und Ziel-ID um 1 verringert (-1). Wenn man eine Zeile nach oben verschiebt, werden alle IDs dazwischen um 1 erhöht (+1). Wichtig ist, dass die Schleife beim letztern Fall dann anders herum laufen muss. Man beginnt also immer mit dem Satz/ID, welcher direkt an die zuvor gelöschte Zeile angrenzt und zählt dann schrittweise zur Ziel-ID hin.
Die DB-Befehle die du dazu benötigst (ich gehe mal davon aus, dass du SQLite verwendest), sind
SELECT, um Sätze auszulesen (die zu verschiebende Zeile auslesen)
DELETE, um Sätze zu löschen (löschen der zu verschiebenden Zeile)
UPDATE, um Daten in Sätzen zu ändern (die IDs ändern, die zwischen Quell- und Ziel-ID liegen)
INSERT, um Sätze zu schreiben (die zu verschiebende Zeile wieder einfügen, mit neuer ID)
(schau mal hier: http://www.ruhrtaler-softwares…egen-aendern-und-loeschen )
Ich hoffe, dass dir meine Erläuterungen aufzeigen, wie das Problem zu lösen ist. Einen Code (ich fange selbst erst gerade mit Android an ... ich kenne mich aber mit Programmierung und Datenbanken aus) kann ich dir aber leider (noch) nicht anbieten.
Gruß