我想知道是否有任何方法可以像 List<> 一样管理 RealmResults。有没有一种简单的方法可以通过事务实现添加特定索引功能?我的意思是,我想从一个位置取出项目并将其放入数据库中的其他位置,最好不使用需要对象中特定字段进行排序的排序。我希望位置反射(reflect)为项目所在位置的索引。
总而言之,如何做到这一点 ->realmResults.add(INDEX, object);使用 Realm 交易? 另外,在插入时,我需要将对象放入数据库中的第一个索引中。
最佳答案
我们 talked about this on Reddit ,解决办法就是显式添加一个字段position
,并使用findAllSorted(MyObjFields.POSITION)
,每当添加新元素时都会自动更新。
要在适配器中实际重新排序数据集,对于较小的数据集,我建议创建结果列表的非托管副本,重新排序,然后将其保存回后台线程。
List<Obj> unmanagedList = realm.copyFromRealm(results);
//...
realm.executeTransactionAsync(new Realm.Transaction() {
public void execute(Realm realm) {
for(int i = 0; i < unmanagedList.size(); i++) {
Obj obj = unmanagedList.get(i);
Obj managedObj = realm.where(Obj.class).equalTo(ObjFields.ID, obj.getId()).findFirst();
if(managedObj != null) {
managedObj.setPosition(i);
}
}
}
});
唯一的边缘情况是,如果添加新元素,非托管列表不会自动更新。如果您确实需要显式处理此问题,则 RealmChangeListener<RealmResults<Obj>>
可用于存储为字段变量的结果集。
关于android - Realm - 将对象插入到特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40171161/