LiveData просто отлично, вот что я недавно сделал (получено из https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150)
сначала создайте класс
public class 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, только в том, что вы можете одновременно прослушивать из нескольких местоположений, и каждое событие будет запущено только один раз, например, если наблюдатель повторно подключен где-то еще.