您基本上可以定义两种不同的方法从PublishSubject
获得Observable
(或Flowable)。首先观察到的将发出的所有项目和第二个只有流行的:
public class DataStore {
private PublishSubject<DataItem> dataItemPublishSubject = PublishSubject.create();
public Flowable<DataItem> getAllObservable() {
return dataItemPublishSubject.toFlowable(BackpressureStrategy.BUFFER);
}
public Flowable<DataItem> getPopularObservable() {
return dataItemPublishSubject.toFlowable(BackpressureStrategy.BUFFER)
.filter(new Predicate<DataItem>() {
@Override
public boolean test(DataItem dataItem) throws Exception {
return dataItem.popular;
}
});
}
public static class DataItem {
public final boolean popular;
public DataItem(boolean popular) {
this.popular = popular;
}
}
}
如果你不想两种方法,你可以在你随处移动运营商.filter()
的Rx链,你可能最终的东西像这样:
dataStore.getAllObservable()
.doOnNext(new Consumer<DataStore.DataItem>() {
@Override
public void accept(DataStore.DataItem dataItem) throws Exception {
pagerAdapter.addDataAll(dataItem);
}
})
.filter(new Predicate<DataStore.DataItem>() {
@Override
public boolean test(DataStore.DataItem dataItem) throws Exception {
return dataItem.popular;
}
})
.doOnNext(new Consumer<DataStore.DataItem>() {
@Override
public void accept(DataStore.DataItem dataItem) throws Exception {
pagerAdapter.addDataPopular(dataItem);
}
})
.subscribe();
请显示一些代码,尤其是您订阅主题的PagerAdapter部分。 – skywall
PagerAdapter没有任何相关的。我正在'ViewPager'绑定'Fragment'的onCreateView中订阅前面提到的'PublishSubject'。 – riteshakya037
你如何从你的'ViewPager'中的父代片段提供数据到片段? – skywall