今天记录下 RxBus 内容
RxBus 可实现组件间 数据的 传递(如两个Activity 之间传递数据);
1.定义 RxBus
public class RxBus {
private static volatile RxBus instance;
private final Subject<Object, Object> BUS;
private RxBus() {
BUS = new SerializedSubject<>(PublishSubject.create());
}
public static RxBus getDefault() {
if (instance == null) {
synchronized (RxBus.class) {
if (instance == null) {
instance = new RxBus();
}
}
}
return instance;
}
public void post(Object event) {
BUS.onNext(event);
}
public <T> Observable<T> toObserverable(Class<T> eventType) {
return BUS.ofType(eventType);
}
}
2.定义 数据 bean
定义的数据,其中就包括了两个变量
public class userEvent {
private String name = null;
private String ID = null;
public userEvent(String name, String ID) {
this.name = name;
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
}
3.MainActvity
public class MainActivity extends AppCompatActivity {
private CompositeSubscription allSubscription = new CompositeSubscription();
private Button button = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//接收数据
allSubscription.add(RxBus.getDefault()
.toObserverable(userEvent.class).subscribe(new Action1<userEvent>() {
@Override
public void call(userEvent uEvent) {
Log.e("MainActivity","response\n" + event.getName());
}
}));
button = (Button)findViewById(R.id.send);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,ScondActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//取消订阅
if (allSubscription != null && !allSubscription.isUnsubscribed())
allSubscription.unsubscribe();
}
}
注意接收数据的类型 是我们定义的 bean – userEvent
4.第二个 Activity
public class ScondActivity extends AppCompatActivity {
private Button button = null;
private userEvent userEvent = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.secd_activity);
button = (Button)findViewById(R.id.secBtn);
userEvent = new userEvent("zhang","1111");
//在这个 Activity 中发送数据,在 MainActivity中可接收到数据
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RxBus.getDefault().post(userEvent);
}
});
}
}
5.添加依赖项
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
以上为学习和理解内容