先看Demo,其中zhang就是第二个Activity在Finsh()时候返回给第一个Activity的字符串。
当然这只是其中最简单的用法,本身Android平台就有很多种几个Activity之间传值的,
但是很多情况比如某个控件状态更新或者请求有了数据之后,别的组件需要得到通知,
传统的方法有观察者模式或者接口回调均可以实现,这次我们用EventBus来实现比较方便简单。
代码
两个Activiy的界面就不用写了,都很简单,第一个就是一个TextVIew和一个Button
第二个Activity放置了一个Button。
思路是我们要在某个界面接受到通知的内容,那么我就注册在某个界面,那么对于Demo来讲
自然就是Activiy1了,
public class MainActivity extends AppCompatActivity {
@Bind(R.id.textView) //用的Butterknife的注解省略findviewbyid方法
TextView textView;
@Bind(R.id.button)
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
EventBus.getDefault().register(this); //再该界面接受通知
}
//下面的注解一定要加,否则无法添加观察者,FirstEvent为我们自己定义的事件类型
@Subscribe
public void onEventMainThread(FirstEvent f){
textView.setText(f.getMsg());
}
@OnClick(R.id.button)
public void onClick() {
startActivity(new Intent(this,Main2Activity.class));
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this); //界面销毁时候一定要解除注册否则内存泄漏
}
}
接受通知的界面我们定义好了,那么谁来发送通知呢?
对于我们Demo来讲,就是Activiy2了
public class Main2Activity extends AppCompatActivity {
@Bind(R.id.button2)
Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ButterKnife.bind(this);
}
@OnClick(R.id.button2)
public void onClick() {
//Post我们可以抽象为当该界面的某个组件发生变化时候,通知其他组件
EventBus.getDefault().post(new FirstEvent("zhang"));
finish();
}
}
ok,大家先可以尝试下,至于其他的用法我们再慢慢研究,先让Demo跑起来
下载 代码