Когда у меня есть объект A
, содержащий список областей B
, если у меня есть запрос для конкретного 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 должен сказать это на SO перед Королевством Github, поскольку это может быть что-то, что я пропустил, а не ошибка.
Есть идеи? – Дай мне знать. Благодаря!
RealmChangeListener
добавленный к объектам напрямую, не будет уведомлен об изменениях в списке (поле ссылки).
Для этого вам нужно добавить слушателя в RealmResults<T>
.
Попробуйте ввести код в своей деятельности
class SampleActivity extends AppCompatActivity implements RealmChangeListener<Realm> { onCreate(...){ realm.addChangeListener(this);// make sure you init realm transaction } @Override public void onChange(@NonNull Realm realm) { // this method will be call after any change in realm } }
Не забудьте удалить всех зарегистрированных слушателей в методе onDestroy
.
ИЛИ
realm = Realm.getDefaultInstance(); realm.addChangeListener(new RealmChangeListener<Realm>() { @Override public void onChange(Realm realm) { // do something } });