Реакция на изменение LiveData в той же ViewModel - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть база ViewModel, расширенная другими ViewModel s:

abstract class BaseViewModel : ViewModel() {
    protected val _state = MutableLiveData<Boolean>()
    protected val state: LiveData<Boolean> = _state 

    ...
}

Я бы хотел иметь возможность реагировать (например, добавлять оператор журнала), когда state изменяется(или _state.setValue(newvalue) или _state.postValue(newvalue) называется), и я хотел бы сделать это внутри BaseViewModel.

Как мне это сделать?

1 Ответ

0 голосов
/ 16 декабря 2018

Тогда

protected val state: LiveData<Boolean> = _state 

На самом деле state должен быть MediatorLiveData, который регистрирует _state в качестве источника.

final MediatorLiveData<T> mediator = new MediatorLiveData<>();
mediator.addSource(_state, new Observer<T>() {
    @Override
    public void onChanged(@Nullable T data) {
        // log here
        mediator.postValue(data);
    }
});
return mediator;

Так что в вашем случае это должно бытькак таковой:

protected val state: LiveData<Boolean> = MediatorLiveData().also { mediator ->
    mediator.addSource(_state) { data ->
        // log here
        mediator.postValue(data)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...