您的位置:首页 > 移动开发 > Android开发

Android_EventBus使用

2016-06-13 17:36 375 查看


先看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跑起来

下载 代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android