代码之家  ›  专栏  ›  技术社区  ›  liminal

对同一个ViewModel中的LiveData更改做出响应

  •  1
  • liminal  · 技术社区  · 6 年前

    我有一个基地 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 回复  |  直到 6 年前
        1
  •  1
  •   EpicPandaForce    6 年前

    然后

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