1.在build.gradle配置文件中的添加:
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
}
2.注册绑定事件
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注册绑定事件即可接收相关数据 EventBus.getDefault().register(this); }
3.订阅事件
1) 订阅普通事件ActivityB返回ActivityA传递数据时用
/*订阅普通事件*/ @Subscribe(threadMode = ThreadMode.MAIN)//更新UI public void event(MessageEvent messageEvents) { tv.setText(messageEvents.getMessage()); }
2) 订阅粘性事件ActivityA跳转到ActivityB传递数据时用(在ActivityB中订阅)
//订阅粘性事件 @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void events(MessageEvent messageEvent) { this.messageEvent = messageEvent; }
4.传递数据
@Override public void onClick(View v) { MessageEvent messageEvents = new MessageEvent(); messageEvents.setMessage("第一个页面传递到第二个页面的数据"); EventBus.getDefault().postSticky(messageEvents); Intent intent = new Intent(ActivityA.this, ActivityB.class); startActivity(intent); }
5.解绑事件
@Override protected void onDestroy() { super.onDestroy(); //解绑事件 if (EventBus.getDefault().isRegistered(this)) { //移除全部粘性事件 EventBus.getDefault().removeAllStickyEvents(); //解绑事件 EventBus.getDefault().unregister(this); } }
代码示例
package com.jagonzn.anzhiyun.eventbusdemo; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; public class FirstActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv, tv1, tv2, tv3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注册绑定事件即可接收相关数据 EventBus.getDefault().register(this); initView(); } private void initView() { tv = (TextView) findViewById(R.id.tv); tv1 = (TextView) findViewById(R.id.tv1); tv2 = (TextView) findViewById(R.id.tv2); tv3 = (TextView) findViewById(R.id.tv3); Button bt = (Button) findViewById(R.id.bt); bt.setOnClickListener(this); } @Override public void onClick(View v) { MessageEvent messageEvents = new MessageEvent(); messageEvents.setMessage("第一个页面传递到第二个页面的数据"); EventBus.getDefault().postSticky(messageEvents); Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); } /*订阅事件*/ @Subscribe(threadMode = ThreadMode.MAIN)//更新UI public void event(MessageEvent messageEvent) { tv.setText(messageEvent.getMessage()); } @Subscribe(threadMode = ThreadMode.POSTING)//默认,同一种线程中接收 public void event1(MessageEvent messageEvent) { tv1.setText(messageEvent.getMessage1()); } @Subscribe(threadMode = ThreadMode.BACKGROUND)//子线程 public void event2(MessageEvent messageEvent) { tv2.setText(messageEvent.getMessage2()); } @Subscribe(threadMode = ThreadMode.ASYNC)//耗时操作 public void event3(MessageEvent messageEvent) { tv3.setText(messageEvent.getMessage3()); } @Override protected void onDestroy() { super.onDestroy(); //解绑事件 if (EventBus.getDefault().isRegistered(this)) { //移除全部粘性事件 EventBus.getDefault().removeAllStickyEvents(); //解绑事件 EventBus.getDefault().unregister(this); } } }
package com.liang.eventbusdemo; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; public class SecondActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv; private MessageEvent messageEvent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); //注册绑定事件即可接收相关数据 EventBus.getDefault().register(this); initView(); } private void initView() { Button bt = (Button) findViewById(R.id.bt); Button bt1 = (Button) findViewById(R.id.bt1); tv = (TextView) findViewById(R.id.tv); bt.setOnClickListener(this); bt1.setOnClickListener(this); //处理相关数据 if (null != messageEvent) { tv.setText(messageEvent.getMessage()); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt: MessageEvent messageEvent = new MessageEvent(); messageEvent.setMessage("第二个页面传递给第一个页面的数据1"); messageEvent.setMessage1("第二个页面传递给第一个页面的数据2"); messageEvent.setMessage2("第二个页面传递给第一个页面的数据3"); messageEvent.setMessage3("第二个页面传递给第一个页面的数据4"); EventBus.getDefault().post(messageEvent); finish(); break; case R.id.bt1: MessageEvent messageEvents = new MessageEvent(); messageEvents.setMessage("第二个页面传递给第三个页面的数据"); EventBus.getDefault().postSticky(messageEvents); Intent intent = new Intent(SecondActivity.this, ThirdActivity.class); startActivity(intent); break; } } //订阅粘性事件 @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void events(MessageEvent messageEvent) { this.messageEvent = messageEvent; } //订阅事件 @Subscribe(threadMode = ThreadMode.MAIN) public void event3(MessageEvent messageEvents) { tv.setText(messageEvents.getMessage()); } @Override protected void onDestroy() { super.onDestroy(); if (EventBus.getDefault().isRegistered(this)) { //移除全部粘性事件 EventBus.getDefault().removeAllStickyEvents(); //解绑事件 EventBus.getDefault().unregister(this); } } }
package com.liang..eventbusdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; public class ThirdActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv; private MessageEvent messageEvent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); //注册绑定事件即可接收相关数据 EventBus.getDefault().register(this); initView(); } private void initView() { Button bt = (Button) findViewById(R.id.bt); tv = (TextView) findViewById(R.id.tv); bt.setOnClickListener(this); if (messageEvent != null) { tv.setText(messageEvent.getMessage()); } } @Override public void onClick(View v) { MessageEvent messageEvents = new MessageEvent(); messageEvents.setMessage("第三个页面传递给第二个页面的数据"); EventBus.getDefault().post(messageEvents); finish(); } //订阅粘性事件 @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void eventT(MessageEvent messageEvent) { this.messageEvent = messageEvent; } @Override protected void onDestroy() { super.onDestroy(); if (EventBus.getDefault().isRegistered(this)) { //移除全部粘性事件 EventBus.getDefault().removeAllStickyEvents(); //解绑事件 EventBus.getDefault().unregister(this); } } }
package com.liang.eventbusdemo; public class MessageEvent { private String message; private String message1; private String message2; private String message3; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getMessage1() { return message1; } public void setMessage1(String message1) { this.message1 = message1; } public String getMessage2() { return message2; } public void setMessage2(String message2) { this.message2 = message2; } public String getMessage3() { return message3; } public void setMessage3(String message3) { this.message3 = message3; } }