Я создал Наблюдаемый, который испускает ViewPager's positionOffset.Как поделиться созданным Наблюдаемым?
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)));
}
});
}
Работает до сих пор.
Но с каждой подпиской он создает новый ViewPager.OnPageChangeListener
и добавляет его в ViewPager.
Есть ли способ, которым все подписки имеют одно и то же наблюдение, что ViewPager имеет только один прослушиватель?
'Observable.share()' выглядит хорошо :-) –