2016-12-31 48 views
2
@Override 
public boolean onItemMove(int fromPosition, int toPosition) { 

    RealmList<Note> results = new RealmList<>(); 
    results.addAll(mNotes.subList(0, mNotes.size())); 

    if (fromPosition < toPosition) { 
     for (int i = fromPosition; i < toPosition; i++) { 
      Collections.swap(results, i, i + 1); 
     } 
    } else { 
     for (int i = fromPosition; i > toPosition; i--) { 
      Collections.swap(results, i, i - 1); 
     } 
    } 

    mNotes = results.where().findAll(); 
    notifyItemMoved(fromPosition, toPosition); 
    return true; 
} 

我想执行交换功能重新排列adapter.Basically我与名单上的项目和拖处理项目的顺序和删除我要重新排列顺序。我所做的是将RealmResults mNotes中的值复制到RealmList结果并完成了swap。如何将其返回到Realm数据库?如何执行上RealmResults交换功能

mNotes = results.where()。findAll(); 这行代码是不可能的,因为RealmList不处于受管模式。

+0

我当然希望你有一个对应于该项目的位置的字段。 – EpicPandaForce

+0

@sreejith'RealmResults'元素不能直接交换。正如@EpicPandaForce所建议的,我认为你需要额外的领域(让我们称之为“职位”)。您可以使用该字段对RealmResults进行排序,然后交换对象,然后交换位置字段的值。 – geisshirt

+0

感谢都为您的建议我尝试排序这样mNotes.sort(新比较(){ @覆盖 公众诠释方法比较comments.Based(注O1,O2注){ 回报results.indexOf(O1。 getId()) - results.indexOf(o2.getId()); } });但这只适用于api 24。使用android.And和Collection.sort方法不能为realmResults执行此操作! –

回答

0

我相信你需要使用

copyToRealmOrUpdate方法来复制你的非托管集合:

// Initialize Realm 
Realm.init(context); 
// Get a Realm instance for this thread 
Realm realm = Realm.getDefaultInstance(); 
realm.copyToRealmOrUpdate(results); 
+0

不适合我! 。我正在使用RealmResults mNotes = realm.where(Note.class).findAll();为RecyclerViewAdapter。由于交换不能直接完成RealmResults,我将其转换为RealmList并执行swap.After交换后,我需要将它放回RealmResults(在我的情况下为mNotes)。 - –