我的使用情况,这是单击视图组听众:如何在运行时“合并”observables?
每个
View
发布感冒Observable<Click>
API。视图组管理视图集合,并提供一个
Observable<ViewClick>
API,它发出来自子视图的点击。
我希望每个子视图在添加到组合观察值时被订阅,但仅当组合具有订阅时才被订阅。如果不是,则只有在组合订阅时才应该订阅该孩子。
到目前为止,我的解决办法是:
PublishSubject<ViewClick> composite;
Map<View, Subscription> subscriptions;
void addSource(View view, Observable<Click> clicks) {
Subscription s = clicks.map(click -> new ViewClick(view, click)
.subscribe(composite::onNext);
subscriptions.put(view, s);
}
void removeSource(View v) {
Subscription s = subscriptions.get(v);
s.unsubscribe;
subscriptions.remove(v);
}
Observable<ViewClick> compositeClicks() {
return composite;
}
然而,这意味着clicks
观测不再寒冷,因为他们不顾一切的是否订阅compositeClicks
认购。
有没有更好的方法?