Eventbus(页面之间的传值)的简单使用
2019-02-19 本文已影响0人
君袅
简述:
简单的说就是可以再整个应用中传递数据和广播该概念差不大,一个人发送别的人都可以申请获取
EventBus 是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信,使用简单、效率高、体积小!下边是官方的 EventBus 原理图:
依赖
implementation 'org.greenrobot:eventbus:3.1.1
代码
本页面之间传值
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
/**
* eventbus
* <p>
* 1.注册
* 2.取消注册
* 3.订阅事件的接收
* 4.发送事件
*/
private Button bt;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
bt = (Button) findViewById(R.id.bt);
tv = (TextView) findViewById(R.id.tv);
bt.setOnClickListener(this);
}
//接收订阅的事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMsgEvent(MsgEvent event){
tv.setText(event.getContent());
}
@Override
protected void onStart() {
super.onStart();
//注册
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
//取消注册
EventBus.getDefault().unregister(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt:
EventBus.getDefault().postSticky(new MsgEvent(111,"如果我们不曾相遇,你会是在哪里")); //发送时间
Intent intent = new Intent( MainActivity.this, Main2Activity.class);
startActivity(intent);
break;
}
}
MsgEvent实体类
public class MsgEvent {
private int id;
private String content;
@Override
public String toString() {
return "MsgEvent{" +
"id=" + id +
", content='" + content + '\'' +
'}';
}
public MsgEvent(int id, String content) {
this.id = id;
this.content = content;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
第二个activity申请传值
public class Main2Activity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
}
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN) //申请订阅(在不同activity)
public void onMsgEvent(MsgEvent event){
tv.setText(event.getContent());
}
@Override
protected void onStart() { //注册
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onStop() { //反注册
super.onStop();
EventBus.getDefault().unregister(this);
}
private void initView() {
tv = (TextView) findViewById(R.id.tv);
}
}