RecyclerView Items Sortieren

  • 0 Antworten
  • Neuster Beitrag
F

falko1985

Neues Mitglied
Threadstarter
Hallo,
ich versuche schon seit einiger Zeit eine Liste mit 2 Spalten zu sortieren, leider klappt das nicht so richtig.
In meiner App verwende ich eine Realm Datenbank und jeder Eintrag hat eine id für das Sortieren, über diese ich dann in bestimmter Reihenfolge Sortieren kann.
In der Methode onItemMove werden die sortIds vertauscht, so das die Sortierte Reihenfolge gespeichert bleibt.
Aber bei 2 Spaltige Liste klappt die Sortierung nicht richtig, die Items sind dann an einer ganz anderen Stelle, wenn ich die Liste Sortieren möchte.
Um 2 Spalten in RecyclerView zu erhalten, benutze ich folgendes:
Code:
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
und so versuche ich die Items zu Sortieren:
Code:
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
    RealmList<CatItem> results = new RealmList<>();
    results.addAll(AppConfig.CAT_ITEM_LIST);

    if (fromPosition < toPosition) {
        for (int i = fromPosition; i < toPosition; i++) {
            realm.beginTransaction();
            long sortId = results.get(i).getSortId();
            results.get(i).setSortId(results.get(i+1).getSortId());
            results.get(i+1).setSortId(sortId);
            realm.commitTransaction();
        }
    } else {
        for (int i = fromPosition; i > toPosition; i--) {
            realm.beginTransaction();
            long sortId = results.get(i).getSortId();
            results.get(i).setSortId(results.get(i-1).getSortId());
            results.get(i-1).setSortId(sortId);
            realm.commitTransaction();
        }
    }
    adapter.notifyItemMoved(fromPosition, toPosition);

    return true;
}
Bei 1 Spaltige Liste klappt die Sortierung hiermit:
Code:
@Override
    public boolean onItemMove(int fromPosition, int toPosition) {
        RealmList<CatItem> results = new RealmList<>();
        results.addAll(AppConfig.CAT_ITEM_LIST);
        realm.beginTransaction();
        long sortId = results.get(fromPosition).getSortId();
        results.get(fromPosition).setSortId(results.get(toPosition).getSortId());
        results.get(toPosition).setSortId(sortId);
        realm.commitTransaction();
        adapter.notifyItemMoved(fromPosition, toPosition);
        return true;
    }
Kann mir da Vielleicht jemand Weiterhelfen, wie ich das Problem lösen kann?
Ich bedanke mich schon mal im Voraus.

Gruss
 
Oben Unten