subscription in construction bug fixed

This commit is contained in:
Gavriil Sitnikov 2016-06-08 20:09:24 +03:00
parent bb857711a6
commit edb34f2cb2
3 changed files with 18 additions and 5 deletions

View File

@ -32,14 +32,16 @@ public class BaseUiBindable implements UiBindable {
@NonNull
public <T> Observable<T> untilStop(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
return isCreatedSubject.first()
.switchMap(isCreated -> isCreated ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.empty())
.takeUntil(isStartedSubject.filter(started -> !started));
}
@NonNull
@Override
public <T> Observable<T> untilDestroy(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
return isCreatedSubject.first()
.switchMap(isCreated -> isCreated ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.empty())
.takeUntil(isCreatedSubject.filter(created -> !created));
}

View File

@ -49,7 +49,7 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
@NonNull
private final ViewGroup container;
@NonNull
private final BehaviorSubject<Boolean> isCreatedSubject = BehaviorSubject.create(true);
private final BehaviorSubject<Boolean> isCreatedSubject = BehaviorSubject.create();
@NonNull
private final BehaviorSubject<Boolean> isStartedSubject = BehaviorSubject.create();
@NonNull
@ -65,7 +65,7 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
}
public boolean isDestroyed() {
return !isCreatedSubject.getValue();
return isCreatedSubject.getValue() != null && !isCreatedSubject.getValue();
}
/**
@ -145,6 +145,10 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
return baseUiBindable.untilDestroy(observable);
}
public void onCreate() {
isCreatedSubject.onNext(true);
}
public void onStart() {
isStartedSubject.onNext(true);
}

View File

@ -106,7 +106,14 @@ public abstract class ViewControllerFragment<TState extends AbstractState, TActi
state.onCreate();
}
viewControllerSubscription = Observable
.combineLatest(activitySubject.distinctUntilChanged(), viewSubject.distinctUntilChanged(), this::createViewController)
.combineLatest(activitySubject.distinctUntilChanged(), viewSubject.distinctUntilChanged(),
(activity, viewInfo) -> {
final ViewController newViewController = createViewController(activity, viewInfo);
if (newViewController != null) {
newViewController.onCreate();
}
return newViewController;
})
.subscribe(this::onViewControllerChanged, Lc::assertion);
}