Реакция на изменение LiveData в той же ViewModel

У меня есть база ViewModel продлен другим ViewModels:

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)
    }
}
Другие вопросы по тегам