android - Realm - 将对象插入到特定位置

标签 android realm

我想知道是否有任何方法可以像 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/

相关文章:

android - 图片不显示在设备上的 url

java - 将捕获的图像转换为位图

swift - 使用 Swift 以编程方式设置 Realm 查询过滤器

swift - 如何使用 ObjectMapper 在 Realm List 中映射 JSON 中的整数数组

java - 使用 ESRI android API 打开文件地理数据库

android - Switch 通过 setChecked 进入循环

Android - 记事本示例 - 为什么要在 onCreate 中填充?

android - 按日期排序 - Realm (Android)

json - Swift Realm 导入 Json 数组数据

swift - Realm 中的 NSPredicate - 在结果中搜索数组中的任何项目