Реакция на изменение LiveData в той же ViewModel
У меня есть база 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 ответ
Решение
Затем
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)
}
}