如何让我的viewmodel在我的活动或片段中调用一个函数而不使用回调,并且实际上不发送任何数据。 LiveData用于将数据从视图模型发送到视图,但是我没有数据。我只想通知ui有关某些内容。应该使用RxJava来做到这一点,还是那是矫?过正?
答案 0 :(得分:0)
LiveData很好,这是我最近所做的(来自https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150)
首先创建一个课程
package com.medbreaker.medat2go;
公共类OneTimeEvent {
private Boolean received;
public OneTimeEvent() {
received = false;
}
public Boolean receive () {
if (!received) {
received = true;
return true;
}
return false;
}
}
然后在您的ViewModel中公开您的事件
private MediatorLiveData<OneTimeEvent> eventListener = new MediatorLiveData<>();
public LiveData<OneTimeEvent> onEvent() {
return eventListener;
}
现在您必须在ViewModel中的某个地方触发事件(就像其他事情已经完成一样)
eventListener.setValue(new OneTimeEvent()); //if its a background thread or callback use postValue!
就是这样,现在您可以在任何您喜欢的活动或片段中观察onEvent()
ViewModel.onEvent().observe(this, new Observer<OneTimeEvent>() {
@Override
public void onChanged(OneTimeEvent oneTimeEvent) {
if (oneTimeEvent.receive()){
// do something on event
}
}
});
希望这会有所帮助,它的作用就像EventListener一样,只是您可以同时从多个位置监听,并且每个事件将仅触发一次,例如,如果将观察者重新连接到其他地方。