Android Probleme mit Realm Datenbank

bruce85

Bekanntes Mitglied
Hallo,
ich benutze in meiner App eine Realm Datenbank und möchte einen neuen Eintrag ganz oben hinzufügen.

Ich hab das mal so versuche:
Java:
public void addCatItem(CatItem item) {
    RealmList<CatItem> results = new RealmList<>();
    results.addAll(AppConst.CAT_ITEM_LIST);
    int nextID = (int) (realm.where(CatItem.class).maximumInt("id") + 1);
    item.setId(nextID);
    item.setSortId(nextID);
    realm.beginTransaction();
    results.add(0, item);
    realm.copyToRealmOrUpdate(results);
    realm.commitTransaction();
}
leider klappt das nicht, der neue Eintrag erscheint immer ganz unten.
Ich habe auch überlegt, nach jedem Eintrag die ids, in der Spalte sortId, neu zu vergeben und die Liste dann dementsprechend bei der abfrage anhand der Sort ids zu Sortieren, aber es muss ja eine bessere Methode geben.
In meiner App hat man auch die Möglichkeit, die Einträge nach seinen Bedürfnissen zu Sortieren mit Collection.swap... usw.
Daher würde ich gerne wissen, wie ich das mit Realm realisieren kann, das ich bereits existierende Eintrag an einer neuen Position speichern kann und neue Einträge sollen direkt an Position 0 gespeichert werden.

Ich bedanke mich schon mal im Voraus.

Gruss
 
Hallo nochmal,
wenn ich einen neuen Eintrag hinzufüge, dann weise ich auch immer die Max id der sortId zu und lasse die Liste einfach andersherum Sortieren, wenn die Liste am anfang geladen wird.
Das klappt erst mal, und das mit dem Sortieren auch:
Java:
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
    RealmResults<CatItem> results = realm.where(CatItem.class).findAll();
    long sortId = results.get(fromPosition).getSortId();
    realm.beginTransaction();
    results.get(fromPosition).setSortId(results.get(toPosition).getSortId());
    results.get(toPosition).setSortId(sortId);
    realm.commitTransaction();
    adapter.notifyItemMoved(fromPosition, toPosition);
    return true;
}
Falls jemand eine bessere Methode kennt, dann würde ich mich sehr freuen. 🙂

Gruss
 
Es klappt doch nicht korrekt.
Ich hab das dann mal so versucht:
Java:
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
    RealmList<CatItem> results = new RealmList<>();
    results.addAll(AppConst.CAT_ITEM_LIST);
    Collections.swap(results, fromPosition, toPosition);
    realm.beginTransaction();
    realm.copyToRealmOrUpdate(results);
    realm.commitTransaction();
    adapter.notifyItemMoved(fromPosition, toPosition);
    return true;
}
Es klappt einfach nicht, dieser Code hat überhaupt keine Wirkung.

Woran könnte das Problem denn liegen?

Gruss
 

Neue Themen


Zurück
Oben