Ich habe eine Observable erstellt, die die ViewPager's positionOffset emittiert.Wie teilt man eine erstellte Observable?
public Observable<Float> observable() {
return Observable.create(new Observable.OnSubscribe<Float>() {
@Override
public void call(final Subscriber<? super Float> subscriber) {
if (viewPager == null) {
if (!subscriber.isUnsubscribed()) {
subscriber.onError(new IllegalStateException("viewPager is null"));
}
return;
}
final ViewPager.OnPageChangeListener listener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(final int position,
final float positionOffset,
final int positionOffsetPixels) {
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(positionOffset);
}
}
@Override
public void onPageSelected(final int position) {
}
@Override
public void onPageScrollStateChanged(final int state) {
}
};
viewPager.addOnPageChangeListener(listener);
subscriber.add(Subscriptions.create(() -> viewPager.removeOnPageChangeListener(listener)));
}
});
}
Es funktioniert so weit.
Aber mit jedem Abonnement erstellt es ein neues ViewPager.OnPageChangeListener
und fügt es dem ViewPager hinzu.
Gibt es eine Möglichkeit, dass alle Abonnements die gleiche Observable teilen, dass der ViewPager nur einen Listener hat?
'Observable.share()' sieht gut aus :-) –