Проблемы с подпиской на наблюдаемые - PullRequest
0 голосов
/ 01 июля 2019

Я слежу за реализацией MVI Каушиком Гопала с помощью ViewStates Observable и ViewEffects Observable. Пример можно посмотреть здесь: https://github.com/kaushikgopal/movies-usf/blob/master/app/src/main/java/co/kaush/msusf/movies/MSMovieVm.kt

Соответствующий фрагмент:

  init {
    eventEmitter
      .doOnNext { Timber.d("[Event]: $it") }
      .eventToResult()
      .doOnNext { Timber.d("[Result]: $it") }
      .share()
      .also { result ->
        viewStates = result
          .resultToViewState()
          .doOnNext { Timber.d("[ViewState]: $it") }
          .replay(1)
          .autoConnect(1) { disposable = it }
          .distinctUntilChanged()

        viewEffects = result
          .resultToViewEffect()
          .doOnNext { Timber.d("[ViewEffect]: $it") }
      }
  }

Основным отличием является то, что я использую фрагменты вместо действий. Все работает с первого раза, но когда я перехожу из фрагмента A во фрагмент B, а затем обратно во фрагмент A, наблюдаемый результат вызывает новые ViewStates, но не новые ViewEffects. Есть ли особый способ подписки / отписки, или я странным образом строю цепочку rx? В настоящее время я подписываюсь на ViewStates и ViewEffects Observables в onViewCreated() и располагаю в onViewDestroyed(). Я проверил, что оба Observables подписаны в каждом случае, просто когда я возвращаюсь к фрагменту A и вводю новые ViewEvents, я получаю новые ViewStates, но не ViewEffects. Может быть, это проблема мульти-кастинга?

...