Итак, в настоящее время я использую DragSortListView с базой данных SQLite. Я хочу прибегнуть к своей базе данных всякий раз, когда я перетаскиваю элемент ListView на новую позицию. Поэтому я написал кусок кода, который должен управлять этим. Но если я перемещаю что-то с позиции ниже на более высокую, это странным образом сортируется. Я уже часами искал этот код и спрашивал некоторых друзей, но я так и не нашел решение.
Код
Метод в DatabaseHelper
public void moveValues(int from, int to, String sammlung){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
System.out.println(from + " - " + to);
if(from < to){
//This part is working properly
Cursor cursor = sqLiteDatabase.rawQuery("SELECT ID FROM " + TABLE_NAME + " WHERE POSITION IS " + "\"" + from + "\" AND SAMMLUNG IS " + "\"" + sammlung + "\"", null);
for (int i = from+1; i < to+1; i++){
switchPositionValue(i, i-1);
}
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_5, to);
cursor.moveToFirst();
sqLiteDatabase.update(TABLE_NAME, contentValues, "ID=?", new String[]{cursor.getInt(0)+""});
cursor.close();
}else{
//This is the not working part
Cursor cursor = sqLiteDatabase.rawQuery("SELECT ID FROM " + TABLE_NAME + " WHERE POSITION IS " + "\"" + from + "\" AND SAMMLUNG IS " + "\"" + sammlung + "\"", null);
for (int i = from-1; i > to-1; i--){
switchPositionValue(i, i+1);
}
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_5, to);
cursor.moveToFirst();
System.out.println(cursor.getInt(0));
//The next line destroys it. But I dont know how to fix it or what exactly is not working
sqLiteDatabase.update(TABLE_NAME, contentValues, "ID=?", new String[]{cursor.getInt(0)+""});
cursor.close();
}
}
Параметры: from: позиция, из которой он был удален: позиция, которую он занял в sammlung: я сохранил все элементы разных коллекций в одной базе данных. Так что это только там, чтобы отсортировать только определенные c элементы.
Метод для изменения значения строки с указанным c позиция
public void switchPositionValue(int before, int after){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_5, after);
sqLiteDatabase.update(TABLE_NAME, contentValues, "POSITION=?", new String[]{before+""});
}
Демонстрация
Так что, если у вас есть идея, почему она ведет себя так странно, или знаете лучший подход к перемещению строки в базе данных, я был бы очень признателен за вашу помощь.