Jim*_*mmy 11 android event-bus android-fragments rx-java
我开始学习RxJava,到目前为止我喜欢它.我有一个片段与按钮单击时的活动进行通信(用新片段替换当前片段).谷歌建议片段的接口与活动进行通信,但是它太冗长了,我试图使用普遍适用的广播接收器,但它有缺点.
因为我正在学习RxJava,我想知道从片段到活动(或片段到片段)的沟通是否是一个很好的选择?如果是这样,那么使用RxJava进行此类通信的最佳方式是什么?我需要做事件总线像这样的一个,如果是那样的话,我应该让总线的一个实例,并在全球范围使用(与主题)?
Dio*_*lor 10
是的,在你学会了如何做之后,这真是太神奇了.考虑以下单例类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在您的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.
});
Run Code Online (Sandbox Code Playgroud)
在你片段发生事件时传递事件:
UsernameModel.instanceOf().setString("Nick");
Run Code Online (Sandbox Code Playgroud)
然后你的活动会做点什么.
提示1:使用您喜欢的任何对象类型更改String.
提示2:如果你有依赖注入,它也很有用.
| 归档时间: |
|
| 查看次数: |
2892 次 |
| 最近记录: |