我开始学习 RxJava,到目前为止我很喜欢它。我有一个片段与单击按钮时的活动进行通信(用新片段替换当前片段)。谷歌推荐界面 http://developer.android.com/training/basics/fragments/communicating.html为了让片段与活动进行通信,但它太冗长了,我尝试使用广播接收器,它通常可以工作,但它有缺点。
由于我正在学习 RxJava,我想知道从片段到活动(或片段到片段)通信是否是一个不错的选择?如果是这样,使用 RxJava 进行此类通信的最佳方法是什么?我需要像这样制作事件总线吗one http://nerds.weddingpartyapp.com/tech/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/如果是这种情况,我应该创建一个总线实例并在全球范围内使用它(带有主题)吗?
是的,当你学会如何做之后,这真是太神奇了。考虑以下单例类:
public class UsernameModel {
private static UsernameModel instance;
private PublishSubject<String> subject = PublishSubject.create();
public static UsernameModel instanceOf() {
if (instance == null) {
instance = new UsernameModel();
}
return instance;
}
/**
* Pass a String down to event listeners.
*/
public void setString(String string) {
subject.onNext(string);
}
/**
* Subscribe to this Observable. On event, do something e.g. replace a fragment
*/
public Observable<String> getStringObservable() {
return subject;
}
}
在您的 Activity 中准备好接收事件(例如,将其放在 onCreate 中):
UsernameModel usernameModel = UsernameModel.instanceOf();
//be sure to unsubscribe somewhere when activity is "dying" e.g. onDestroy
subscription = usernameModel.getStringObservable()
.subscribe(s -> {
// Do on new string event e.g. replace fragment here
}, throwable -> {
// Normally no error will happen here based on this example.
});
在您的片段中,当事件发生时传递该事件:
UsernameModel.instanceOf().setString("Nick");
然后你的活动就会做一些事情。
提示 1:将字符串更改为您喜欢的任何对象类型。
提示 2:如果您有依赖注入,它也很有效。
Update:我写了一篇比较长的article https://lorentzos.com/rxjava-as-event-bus-the-right-way-10a36bdd49ba
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)