Уведомлять наблюдателей LiveData об изменении вложенных свойств - PullRequest
1 голос
/ 19 июня 2019

Скажите, что мой LiveData выглядит следующим образом LiveData<List<Dog>> dogsLiveData = ...

Когда я изменяю свойство объекта Dog, я хочу, чтобы наблюдатель LiveData был уведомлен.Как мне это сделать?

public void doChange(){
   List<Dog> dogs = dogsLiveData.value;
   Dog d = dogs.get(1);
   d.setLegs(5); //I want this to trigger notification. How?
}

(нога изменена с 4 на 5 в примере)

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

У вас может быть MutableLiveData вместо LiveData, чтобы иметь возможность устанавливать новые значения. Согласно Android-документации , LiveData является неизменяемой, а MutableLiveData расширяет LiveData и является изменчивой.

Так что вам нужно перейти с LiveData<List<Dog>> на MutableLiveData<List<Dog>>

Кроме того, в вашем ViewModel создайте метод для наблюдаемого списка:

 public LiveData<List<Dog>> getDogsObservable() {
        if (dogsLiveData == null) {
            dogsLiveData = new MutableLiveData<List<Dog>>();
        }
        return dogsLiveData;
 }

И, наконец, к вашей MainActivity или любой другой деятельности, которая содержит ViewModel, добавьте этот кусок кода:

viewModel.getDogsObservable().observe(context, dogs -> { //Java 8 Lambda
    if (dogs != null) {
       //Do whatever you want with you dogs list
    }
}
0 голосов
/ 19 июня 2019

Единственный способ - переназначить значение данных в реальном времени, оно не сработает при изменении элементов списка.

public void doChange(){
   List<Dog> dogs = dogsLiveData.value;
   Dog d = dogs.get(1);
   d.setLegs(5);
   dogsLiveData.value = dogs
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...