В настоящее время я наблюдаю некоторые данные в моем ViewModel
.Как только эти данные меняются, мой ViewModel
получает информацию и выполняет некоторые вычисления.После этого это вызовет какое-то действие на мой взглядЭто, очевидно, невозможно напрямую из-за слабой связи.Итак, я создал LiveData
, который выдает значение после вычислений, которое может наблюдаться представлением, чтобы инициировать действие appopriate (то есть запустить фрагмент).Моя проблема здесь в том, что у меня есть некоторые данные для LiveData
, но мне не нужны никакие данные для запуска этого действия.
Пример:
public class LandingViewModel extends ViewModel {
private static final String TAG = "LandingViewModel";
private final SessionKeyDao sessionKeyDao;
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
private final MutableLiveData<Void> showGameFragment = new MutableLiveData<>();
@Inject
public LandingViewModel(final ProtocolMessageRepository protocolMessageRepository, final SessionKeyDao sessionKeyDao) {
this.sessionKeyDao = sessionKeyDao;
compositeDisposable.add(protocolMessageRepository.getStartGameReponse()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(this::OnStartGame, LandingViewModel::onError)
);
}
private static void onError(final Throwable throwable) {
Log.d(TAG, throwable.getMessage());
}
@Override
protected void onCleared() {
compositeDisposable.clear();
}
public LiveData<Void> getShowGameFragment() {
return showGameFragment;
}
private void OnStartGame(final StartGameResponse startGameResponse) {
sessionKeyDao.save(new SessionKey(startGameResponse.getSessionId()));
showGameFragment.postValue(null);
}
}
Есть ли лучший способ сделать это?