对同一个 ViewModel 中的 LiveData 变化做出反应

Reacting to LiveData change within same ViewModel

我有一个基础 ViewModel 由其他 ViewModel 扩展:

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

    ...
}

我希望能够在 state 更改(调用 _state.setValue(newvalue)_state.postValue(newvalue) 时做出反应(例如,添加日志语句)并且我会喜欢在BaseViewModel里面做。

我该怎么做?

然后

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)
    }
}