从视图模型回调到不包含数据的ui

时间:2019-05-20 09:13:25

标签: android kotlin rx-java

如何让我的viewmodel在我的活动或片段中调用一个函数而不使用回调,并且实际上不发送任何数据。 LiveData用于将数据从视图模型发送到视图,但是我没有数据。我只想通知ui有关某些内容。应该使用RxJava来做到这一点,还是那是矫?过正?

1 个答案:

答案 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一样,只是您可以同时从多个位置监听,并且每个事件将仅触发一次,例如,如果将观察者重新连接到其他地方。