编辑领域对象关系而不提交事务

时间:2015-12-09 09:14:45

标签: android realm

我有一个名为Person的类,其中一个变量是一个名为衣服的领域列表:

public class Person extends RealmObject{
  private RealmList<Clothing> clothes;
}

衣服用于在RecyclerView中显示,其中可以编辑内容,例如数量,衣服颜色或布料类型。

编辑服装价值时:

public void setCloth(int i, Cloth cloth) {
        realmInstance.beginTransaction();
        clothes.set(i, cloth);
        realmInstance.commitTransaction();
    }

当然,记录已保存。我的问题是,如果用户,取消编辑WHOLE Person对象。然后衣服清单的变化将持续存在。

请帮忙。

2 个答案:

答案 0 :(得分:1)

我相信你会非常喜欢嵌套交易(https://github.com/realm/realm-java/issues/1509)。

在下一版Realm中,将引入一种新方法copyFromRealm()。您应该复制clothes列表,并在提交copyToRealmOrUpdate()对象时使用Person

答案 1 :(得分:0)

我现在已经解决了这个问题:

解决方案是,如果您正在使用片段或活动,并通过小部件显示领域对象及其关系,请立即开始交易。

Realm realmInstance = Realm.getInstance(this);
realmInstance.beginTransaction();

这样,直接在域对象上进行的更改是否允许关系或普通变量。

要取消所做的更改,只需使用:

realmInstance.cancelTransaction();

可以通过覆盖onBackPressed或任何取消编辑的方法来调用此代码。

取消交易后,包括RealmList对象在内的所有更改都将被没收。

更多信息: 我通过带编辑控件的适配器(等设置数量,更改布料类型)在recyleview中显示衣服列表数组。该解决方案也可用于该场景。

希望这有帮助。