EventBus 3.0的用法 Demo

這裏寫圖片描述

啥是 EventBus ,大家也都知道了,否則也不會跑來用。現在都更新到3.0了,我也是最近纔去使用它,以前知道,但是畢竟沒去實際運用,最近比較閒,也就來跳跳坑了。

首先,引用相關jar包依賴(額,這裏還是用的Eclipse…用AS的自行跳過,直接添加一句依賴代碼就好。)

這裏寫圖片描述
考慮周到的我,直接貼出jar包下載地址。
http://download.csdn.net/detail/pmqiujun/9625605

由於只是一個小Demo,簡單的測試一下,根據傳入不同的參數,而讓不同的處理函數去處理相關業務。

還是直接上代碼吧,實在太簡單,沒得BB了。

Activity 1 :

package com.adj.eventsbusdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;
import de.greenrobot.event.ThreadMode;

public class MainActivity extends Activity implements OnClickListener {

    private TextView tv_msg_from_a2;

    private Button bt_goto_a2;

    private static String TAG = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TAG = this.getClass().getSimpleName();
        initViews();
    }

    private void initViews() {
        tv_msg_from_a2 = (TextView) findViewById(R.id.tv_msg_from_a2);
        bt_goto_a2 = (Button) findViewById(R.id.bt_goto_a2);
        bt_goto_a2.setOnClickListener(this);
        EventBus.getDefault().register(this);
    }

    /*
     * 選擇處理方法的時候根據 post方法的參數類型 和 處理方法的參數類型匹配
     * 
     * post 的是 String 類型的
     */
    @Subscribe(threadMode = ThreadMode.MainThread)
    public void helloEventBusString(String message) {
        if (!message.isEmpty()) {
            tv_msg_from_a2.setText("Activity 2 發送返回的是String類型:" + message);
        } else {
            tv_msg_from_a2.setText("Activity 發送返回的 String 數據信息爲空!" + message);
            Log.e(TAG, "Activity 發送返回的 String 數據信息爲空!");
        }

    }

    /*
     * 選擇處理方法的時候根據 post方法的參數類型 和 處理方法的參數類型匹配
     * 
     * post 的是 Integer 類型的  (請注意:只能用 Integer,不能用 int )
     */
    @Subscribe(threadMode = ThreadMode.MainThread)
    public void helloEventBusInt(Integer mint) {
        if ("null".equals(String.valueOf(mint))) {
            tv_msg_from_a2.setText("Activity 發送返回的 Integer 數據信息爲空!");
            Log.e(TAG, "Activity 發送返回的 Integer 數據信息爲空!");
        } else {
            tv_msg_from_a2.setText("Activity 2 發送返回的是Integer 類型:" + mint);
        }

    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.bt_goto_a2) {
            startActivity(new Intent(MainActivity.this, MainActivity2.class));
        }
    }
}

Activity 2 :

package com.adj.eventsbusdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import de.greenrobot.event.EventBus;

public class MainActivity2 extends Activity implements OnClickListener {

    private Button bt_send_msg_to_a1;

    private Button bt_send_int_msg_to_a1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2);
        initViews();
    }

    private void initViews() {
        bt_send_msg_to_a1 = (Button) findViewById(R.id.bt_send_msg_to_a1);
        bt_send_int_msg_to_a1 = (Button) findViewById(R.id.bt_send_int_msg_to_a1);
        bt_send_int_msg_to_a1.setOnClickListener(this);
        bt_send_msg_to_a1.setOnClickListener(this);
    }

    public void onClick(View v) {
        if (v.getId() == R.id.bt_send_msg_to_a1) {
            String msg = "Andjun";
            EventBus.getDefault().post(msg);
            this.finish();
        }
        if (v.getId() == R.id.bt_send_int_msg_to_a1) {
            Integer mint = 333;
            EventBus.getDefault().post(mint);
            this.finish();
        }
    }

}

這裏寫圖片描述額,確實就是這麼簡單而已,主要是3.0的這個用法太簡便了,響應又快,註冊一下,傳不同參數,甚至是封裝好的對象,簡直完美~

最後上個效果圖啥的吧,顯得正式一點嘛

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

坑坑坑坑坑

相比也應該看到我代碼裏面註釋的部分,在使用 int 的時候,智能使用 Integer 類型,不能使用不封裝的 int ,否則處理函數無法執行。。。這裏寫圖片描述,還好後來發現,我還以爲又是電腦有毒了,不過我還沒去看EcentsBus的源碼,所以還不知道爲什麼不能直接用 int 。這個,日後再去了解吧。

總的來說,這個小測試Demo,還是十幾分鍾就能寫完的,確實沒啥,知識簡單的熟悉一下它的用法,相比舊版本的,確實更加方便,真心推薦。比用Handler啥的都舒服得多。畢竟程序猿都很累的,能省功夫的時候先省省吧。O(∩_∩)O

這個只是在兩個Activity之間的互相響應,處理,後期還要在Fragment,Services,什麼的各種地方時間一下,畢竟實際開發中怎麼可能全是隻有Activity,對吧。任重而道遠,騷年,繼續刨坑吧……..這裏寫圖片描述

再會~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章