EventBus框架之一、开发入门

本文介绍了一个使用EventBus框架实现的简单加法计算器示例。通过创建两个Activity,一个用于输入数值并触发计算,另一个接收计算结果并显示。文章详细讲解了如何在Android应用中集成EventBus,包括注册和注销EventBus、定义事件类、发送和接收事件。

    前言:前几天给一个朋友聊天,“最近android开发都用EventBus了”,我当时问了句EventBus是什么?说笑到我们都落伍了。由于最近公司项目近尾声,元旦后要开始苦逼的魔都之旅,现在空闲时间还是比较多的,就研究下这个框架吧。在Github下载到源码,以及附带的demo还是不适合入门的,网络上大多都是框架设计的架构以及大致的用法。在自己的摸索下先写个入门的笔记吧。

一、 源码下载

    该项目依然是托管在gitHub上,首先把源码下载下来。 项目地址

二、示例介绍

    这里要实现的demo为简单的加法计算器,第一个Activity中有一个TextView和一个Button, TextView用于记录第二个Activity计算的结果,第二个Activity有两个EditText和一个Button,EditText用于输入需要计算的数字,点击按钮后将计算的结果通过EventBus返回给第一个Activity并显示在TextView中。效果图如下:

    

三、实现过程

    1. 架子搭建

    先把界面以及点击第一个Activity的按钮跳转到第二个Activity,以及两个数的加法实现。
    第一个Activity的布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:textSize="22sp"
        android:id="@+id/main_act_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:hint="用于显示第二个activity计算的结果" />

    <Button
        android:id="@+id/main_act_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"
        android:text="开启第二个Activity" />

</RelativeLayout>
可以看到非常简单,只有一个TextView以及一个Button;
    然后是MianActivity中的代码:
public class MainActivity extends Activity implements OnClickListener{
	/** 上方文字 */
	private TextView tv = null;
	/** 开启第二个actvity的按钮 */
	private Button btn  = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initWidget(); 							// 初始化控件
		initOnClickListener(); 					// 初始化点击事件
	}

	@Override
	public void onClick(View v) {
		if (v.getId() == R.id.main_act_btn) {
			this.startActivity(new Intent(getApplicationContext(), CalcActivity.class));
		}
	}
	
	/** 初始化控件 */
	private void initWidget() {
		tv = (TextView)this.findViewById(R.id.main_act_tv);
		btn = (Button)this.findViewById(R.id.main_act_btn);
	}
	
	/** 初始化点击事件 */
	private void initOnClickListener() {
		if(btn != null) {
			btn.setOnClickListener(this);
		}
	}
}
可以看到有初始化控件以及绑定按钮的点击监听事件,以及在监听事件中打开第二个Activity。
    第二个Activity的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/calc_act_et1"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:hint="第一个数" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="+" />

        <EditText
            android:id="@+id/calc_act_et2"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:hint="第一个数" />

        <Button
            android:id="@+id/calc_act_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:text="计算结果" />
    </LinearLayout>

</RelativeLayout>
同样也是灰常简单,两个输入框一个按钮。
    在第二个Activity中,点击“计算结果”按钮的时候取出两个输入框的值进行相加。
public class CalcActivity extends Activity implements View.OnClickListener{
	/** 第一个输入数字 */
	private EditText et1 = null;
	/** 第二个输入数字 */
	private EditText et2 = null;
	/** 计算按钮 */
	private Button   btn = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_calc);
		initWidget(); 			// 初始化控件
		initOnClickListener(); 	// 初始化点击事件
	}

	@Override
	public void onClick(View v) {
		if (v.getId() == R.id.calc_act_btn) { // 点击后的操作
			int result = calculate();
		}
	}
	
	/** 相加计算 */
	private int calculate() {
		return Integer.parseInt(et1.getText().toString().trim()) +
				Integer.parseInt(et2.getText().toString().trim());
	}

	/** 初始化控件 */
	private void initWidget() {
		et1 = (EditText)this.findViewById(R.id.calc_act_et1);
		et2 = (EditText)this.findViewById(R.id.calc_act_et2);
		btn = (Button)this.findViewById(R.id.calc_act_btn);
	}
	
	/** 初始化点击事件 */
	private void initOnClickListener() {
		btn.setOnClickListener(this);
	}
}
到目前为止实现的效果为: 
    

   2. 填入EventBus通信

   第一、在第一个Activity的onCreat()中注册EventBus;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initWidget(); 							// 初始化控件
		initOnClickListener(); 					// 初始化点击事件
		EventBus.getDefault().register(this); 	// 注册EventBus
	}
在onDistory()中解除EventBus的注册:
	@Override
	protected void onDestroy() {
		super.onDestroy();
		EventBus.getDefault().unregister(this);	// 解除EventBus注册
	}

    第二、写一个AddEvent,在构造函数中给成员变量赋值,并且还有一个方法可以获取该成员变量的值。

public class AddEvent {

	private int result;

	public AddEvent(int result) {
		this.result = result;
	}

	public int getResult() {
		return result;
	}
}

    第三、在第二个Activity计算完成后发送消息;

	@Override
	public void onClick(View v) {
		if (v.getId() == R.id.calc_act_btn) { // 点击后的操作
			int result = calculate();
			EventBus.getDefault().post(new AddEvent(result));
		}
	}

    第四、在第一个Activity中接收消息并显示到界面

	public void onEventMainThread(AddEvent event) {  
	    int result = event.getResult();  
	    tv.setText("计算结果为:" + result);
	}
至此,一个最简单的EventBus的应用实例就结束了,是不是比startActivityForResult的方式更清爽呢?

    接下来总结下我们步骤:

    1. 注册EventBus以及解除注册EventBus;
    2. 定义Event;
    3. 发送消息;
    4. 接收消息;

四、下载传送门

EventBus示例完整代码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值