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,对吧。任重而道远,骚年,继续刨坑吧……..这里写图片描述

再会~~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值