快速教你上手EventBus3.0,在EventBus3.0之前用法不同茫因,就不在這里說了蚪拦。
準備工作,建立EventBus3.0的依賴:
compile 'org.greenrobot:eventbus:3.0.0'
基本使用
1.在需要訂閱的組件內(nèi)注冊事件:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
message = (TextView) this.findViewById(R.id.message);
EventBus.getDefault().register(this);
}
2.在結(jié)束的時候注銷事件:
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
3.定義接受事件的方法,可以看到下面代碼的源注釋冻押,當(dāng)需要定義接受方法的時候驰贷,就需要如此申明
,threadMode = ThreadMode.MAIN表示接受的方法發(fā)生的線程洛巢,其他線程指定的方式在下一章具體解釋括袒。
注意:參數(shù)不支持基本數(shù)據(jù)類型,想用整型必須使用Integer:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onBus(String msg){
message.setText(msg);
}
4.發(fā)送事件參數(shù)稿茉,發(fā)送的參數(shù)不支持基本數(shù)據(jù)類型:
public void oneView(View v){
EventBus.getDefault().post("開車了");
}
以上就是EventBus的基本使用了:下面介紹一下簡單的用法:
用法一锹锰,同一組件內(nèi)發(fā)送和接收事件
package com.jelly.eventbus;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
public class MainActivity extends AppCompatActivity {
private TextView message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
message = (TextView) this.findViewById(R.id.message);
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
/**
* 同一界面內(nèi)傳遞字符串
* @param msg
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onBus(String msg){
message.setText(msg);
}
public void oneView(View v){
EventBus.getDefault().post("同一界面內(nèi)點擊");
}
}
在Activity的生命周期onCreate方法中注冊事件,在onDestroy()方法中注銷事件漓库,寫了一個在主線程中執(zhí)行的接收事件的方法修改TextView的值恃慧,點擊按鈕是發(fā)送事件。
用法二渺蒿,事件傳遞自定義的對象
定義一個Bean
public class Message {
public String message;
public Message(String message) {
this.message = message;
}
}
事件接收和發(fā)送邏輯痢士,在這里發(fā)送的是自定義的對象
package com.jelly.eventbus;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
public class MainActivity extends AppCompatActivity {
private TextView message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
message = (TextView) this.findViewById(R.id.message);
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
/**
* 傳遞對象
* @param msg
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onBus(Message msg){
message.setText(msg.message);
}
public void postObj(View v){
EventBus.getDefault().post(new Message("傳遞對象"));
}
}
用法三,在不同的組件之間發(fā)送和接收事件
接收事件的Activity
package com.jelly.eventbus;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
message = (TextView) this.findViewById(R.id.message);
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
/**
* 不同組件之間傳遞數(shù)據(jù)
* @param i
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onBus(Integer i){
Log.v("bus",i+"");
}
public void secondView(View v){
Intent intent = new Intent(this,SecondActivity.class);
startActivity(intent);
}
}
發(fā)送事件的Activity茂装,剛開始寫的時候在發(fā)送事件的Activity里面內(nèi)也加上的注冊和注銷操作怠蹂,然后運行失敗,在發(fā)送事件的組件內(nèi)不需要在注冊和注銷EventBus
package com.jelly.eventbus;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import org.greenrobot.eventbus.EventBus;
/**
* Created by Jelly on 2016/9/27.
*/
public class SecondActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_second);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
public void twoCon(View view){
Log.v("bus","點擊");
EventBus.getDefault().post(1);
}
}
在接收事件的Activity中啟動發(fā)送事件的Activity少态,點擊其中的按鈕城侧,打印的日志結(jié)果如下
結(jié)果
更多用法見來不及解釋了,快上車之EventBus3.0更多實用使用