我的基础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
内部进行操作。
我该怎么做?
答案 0 :(得分:1)
然后
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)
}
}