diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java index 5768dc8..c238179 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java @@ -53,6 +53,8 @@ public class ViewController isDestroyedSubject = BehaviorSubject.create(false); + @NonNull + private final BehaviorSubject isStartedSubject = BehaviorSubject.create(false); public ViewController(@NonNull final CreationContext creationContext, @Nullable final Bundle savedInstanceState) { @@ -137,9 +139,9 @@ public class ViewController Observable bind(@NonNull final Observable observable) { - return observable - .observeOn(AndroidSchedulers.mainThread()) - .takeUntil(isDestroyedSubject.filter(isDestroyed -> isDestroyed).first()); + return isStartedSubject + .switchMap(isStarted -> isStarted ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.never()) + .takeUntil(isDestroyedSubject.filter(isDestroyed -> isDestroyed)); } /** @@ -154,10 +156,18 @@ public class ViewController createViewControllerObservable() { - return Observable.combineLatest(activitySubject.distinctUntilChanged(), viewSubject.distinctUntilChanged(), this::createViewController) - .onErrorResumeNext(throwable -> { - Lc.assertion(throwable); - return Observable.empty(); - }); + viewControllerSubscription = Observable.combineLatest(activitySubject, viewSubject, this::createViewController) + .subscribe(this::onViewControllerChanged, Lc::assertion); } @Nullable @@ -171,6 +159,15 @@ public abstract class ViewControllerFragment