Android 使用PublishSubject向特定观察者发布

Android 使用PublishSubject向特定观察者发布,android,rx-android,rx-java2,Android,Rx Android,Rx Java2,我有一个ViewPager,有两个页面,分别是Popular和All。我试图实现的是只将具有popular标签的项目推送到popular,而将所有项目推送到all 目前,我有一个类,用于PagerAdapter并传入页面类型。如何筛选出PublishSubject,以便每个页面只相应地显示必要的项目 我的两个观察者都订阅了一个PublishSubject,但我 要在发射时进行过滤 如果问题不清楚,请发表评论。我会尽力解决这个问题。如果已经回复,也很抱歉,因为我找不到任何相关内容 我使用的代码基于

我有一个
ViewPager
,有两个页面,分别是PopularAll。我试图实现的是只将具有popular标签的项目推送到popular,而将所有项目推送到all

目前,我有一个类,用于
PagerAdapter
并传入页面类型。如何筛选出
PublishSubject
,以便每个页面只相应地显示必要的项目

我的两个观察者都订阅了一个
PublishSubject
,但我 要在发射时进行过滤

如果问题不清楚,请发表评论。我会尽力解决这个问题。如果已经回复,也很抱歉,因为我找不到任何相关内容

我使用的代码基于其中的Firebase数据存储,它提供了
PublishSubject
。这是稍后由in订阅的


提前谢谢

您基本上可以定义两种不同的方法来从
PublishSubject
获取可观察的
(或可流动的)。第一个observable将发射所有项目,第二个仅发射流行项目:

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;
        }
    }
}

基本上,您可以定义两种不同的方法来从
PublishSubject
获取可观察的(或可流动的)。第一个observable将发射所有项目,第二个仅发射流行项目:

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;
        }
    }
}

请显示一些代码,特别是PagerAdapter中您订阅主题的部分。PagerAdapter没有任何相关内容。我在
Fragment
的onCreateView中订阅了前面提到的
PublishSubject
,它绑定到
ViewPager
如何在
ViewPager
中提供从父片段到片段的数据?我已经添加了对整个代码库的引用并链接了相关类。请展示一些代码,尤其是PagerAdapter中您订阅主题的部分。PagerAdapter没有任何相关内容。我在
Fragment
的onCreateView中订阅了前面提到的
PublishSubject
,它绑定到
ViewPager
如何在
ViewPager
中从父片段到片段提供数据?我已经添加了对整个代码库的引用并链接了相关类。我想没有什么好办法这是第一个解决方案之外的问题。谢谢你的更新。我想除了第一个解决方案之外,没有什么好办法可以做到这一点。谢谢你的更新。