Несовпадение позиций в адаптере и базе данных после удаления элемента
Использую RecyclerView адаптер и базу данных SQLite. Реализовано перетаскивание (сортировка) элементов при помощи onMove. Проблема заключается в том, что после удаления одного из элементов, перетаскивание работает неверно, в базу записываются неверные значения. Предполагаю, что проблема заключается в несовпадении позиций в адаптере и базе данных. В базе после удаления элемента, _id имеет, например, такой порядок: 1, 2, 4, 5. В адаптере, скорее всего: 0, 1, 2, 3. При сортировке и обновлении в базе добавляю к toPosition и fromPosition + 1 для выравнивания позиций. Как выровнять эти позиции после удаления одного из элементов? Какое может быть решение этой проблемы?
AdapterSmetaFull.java
@Override
public void onRowMoved(int fromPosition, int toPosition) {
if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(mPeopleList, i, i + 1);
}
} else {
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(mPeopleList, i, i - 1);
}
}
notifyItemMoved(fromPosition, toPosition);
String vd_rabot_from = mPeopleList.get(fromPosition).getVd_rabot();
String kol_from = mPeopleList.get(fromPosition).getKol();
String zena_from = mPeopleList.get(fromPosition).getZena();
String valuta_from = mPeopleList.get(fromPosition).getValuta();
String slog_from = mPeopleList.get(fromPosition).getSlog();
String vd_rabot_to = mPeopleList.get(toPosition).getVd_rabot();
String kol_to = mPeopleList.get(toPosition).getKol();
String zena_to = mPeopleList.get(toPosition).getZena();
String valuta_to = mPeopleList.get(toPosition).getValuta();
String slog_to = mPeopleList.get(toPosition).getSlog();
// updating Swap
final DatabaseAccessSmeta databaseAccessSmeta = DatabaseAccessSmeta.getInstance(mContext);
databaseAccessSmeta.open();
DatabaseAccessSmeta db = new DatabaseAccessSmeta(mContext);
PersonSmetaUpdate fromUpdatedPerson = new PersonSmetaUpdate(vd_rabot_from, kol_from, zena_from, valuta_from, slog_from);
PersonSmetaUpdate toUpdatedPerson = new PersonSmetaUpdate(vd_rabot_to, kol_to, zena_to, valuta_to, slog_to);
db.updateSwap(toPosition, toUpdatedPerson, smeta_ident);
db.updateSwap(fromPosition, fromUpdatedPerson, smeta_ident);
db.close();
}
DatabaseAccessSmeta.java
public void updateSwap(long swap, PersonSmetaUpdate updatedperson, String smeta_ident) {
swap = swap + 1;
this.database = openHelper.getWritableDatabase();
database.execSQL("UPDATE " +smeta_ident+ " SET vd_rabot ='"+ updatedperson.getVd_rabot() + "', kol ='" + updatedperson.getKol()+ "', zena ='"+ updatedperson.getZena() + "', valuta ='"+ updatedperson.getValuta() + "', slog ='"+ updatedperson.getSlog() + "' WHERE _id='" + swap + "'");
database.close();
}