Изменить уведомления в Realm для внутренних объектов?

Когда у меня есть объект 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 } }); 
Intereting Posts
Dagger2 + Kotlin, инъекция не работает Android: Как сделать преобразователи типов (для комнаты) универсальными для всех Список объектов в Котлине Интерфейсы Kotlin экспортируют в Javascript отсутствующие свойства Kotlin \ Java – Как получить сумму измененных элементов массива между объектом и GoogleMap в kotlin Пользовательский полу-обобщенный Factory для ViewModels IntelliJ импортирует Java Boolean и затем выдает ошибку Чем отличаются код A и код B в Котлине? Android посыльный – писать с нулевым длинным Почему я не могу сказать: val list = properties.map ((ключ, значение) -> "$ key = $ value") Методы ведения журнала Anko не могут быть решены Переопределяющая переменная создает NPE, когда переменная используется при инициализации в суперклассе Безопасно ли вызывать kclass.memberProperties на неизвестном (Any) объекте? Android Как установить множественные значения гравитации программно в Котлин? Несоответствие типов. Обязательная карта <String, Any> Найдено карта <String, Any?>