【发布时间】:2017-11-22 14:48:40
【问题描述】:
当我有一个包含B 领域列表的对象A 时,如果我查询特定A 并编辑其B 列表中的项目;我不会收到更改通知
这是期望的行为吗?
代码示例:
class ExerciseInfo : RealmObject() {
@PrimaryKey
var id: String? = null
var muscleFields: MuscleFields? = null
}
class MuscleFields : RealmObject() {
var muscles: RealmList<Muscle>? = null
}
class Muscle : RealmObject() {
var id: String? = null
var name: String? = null
}
//Example, performed inside a Realm transaction
realm.where(ExerciseInfo::class.java)
.findFirst()
.muscleFields
?.muscles
?.let{ it.first().name += ":)" }
以上所有内容都是示例代码 - 但场景完全相同。
我可以验证编辑是否已执行并存储在数据库中;并且不会为 ExeciseInfo RealmObject 触发更改通知,无论我是否将其与 addChangeListener() 或 Flowable 方法一起使用。此外,如果直接在练习课上执行编辑,则相同的场景确实有效,例如直接在 ExerciseInfo 类上编辑一些字段,而不是在其中编辑其他对象。
我希望这是有道理的。认为 Id 在 Realm Github 之前将其发布在 SO 上,因为它可能是我错过的东西,而不是错误。
有什么想法吗? - 让我知道。谢谢!
【问题讨论】:
-
RealmChangeListener添加到了什么? -
@EpicPandaForce ExerciseInfo 对象。
-
像
exerciseInfo.addChangeListener(new RealmObjectChangeListener或类似的东西?不是realmResults? -
@EpicPandaForce 在这种情况下,我只是查询一个对象(findFirst()),所以监听器被直接添加到它。
-
这应该是期望的行为。见realm.io/docs/java/4.2.0/api/io/realm/…在List中添加/删除/移动元素,但不修改列表中的对象时应该触发。