From 3efeb33bc94de543debf33e87920970a68b206c4 Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Sun, 3 Apr 2016 17:08:13 +0300 Subject: [PATCH] now bindings working only while fragment started --- .../components/navigation/ViewController.java | 16 ++++++-- .../navigation/ViewControllerFragment.java | 39 ++++++++++++------- 2 files changed, 37 insertions(+), 18 deletions(-) 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