EventBus使用详解(一)——初步使用EventBus


微信小程序实战项目——点餐系统       程序员11月书讯,评论得书啦        Get IT技能知识库,50个领域一键直达

EventBus使用详解(一)——初步使用EventBus

207415人阅读 评论(110) 收藏 举报
本文章已收录于:
分类:
5、andriod开发(148)
作者同类文章 X

前言:EventBus是上周项目中用到的,网上的文章大都一样,或者过时,有用的没几篇,经过琢磨,请教他人,也终于弄清楚点眉目,记录下来分享给大家。


相关文章:

1、《EventBus使用详解(一)——初步使用EventBus》

2、《EventBus使用详解(二)——EventBus使用进阶》


一、概述

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
1、下载EventBus的类库
源码:https://github.com/greenrobot/EventBus

2、基本使用

(1)自定义一个类,可以是空类,比如:

public class AnyEventType {
	 public AnyEventType(){}
 }

(2)在要接收消息的页面注册:

eventBus.register(this);

(3)发送消息

eventBus.post(new AnyEventType event);

(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):

public void onEvent(AnyEventType event) {}
(5)解除注册
eventBus.unregister(this);
顺序就是这么个顺序,可真正让自己写,估计还是云里雾里的,下面举个例子来说明下。

首先,在EventBus中,获取实例的方法一般是采用EventBus.getInstance()来获取默认的EventBus实例,当然你也可以new一个又一个,个人感觉还是用默认的比较好,以防出错。

二、实战

先给大家看个例子:

当击btn_try按钮的时候,跳到第二个Activity,当点击第二个activity上面的First Event按钮的时候向第一个Activity发送消息,当第一个Activity收到消息后,一方面将消息Toast显示,一方面放入textView中显示。


按照下面的步骤,下面来建这个工程:

1、基本框架搭建

想必大家从一个Activity跳转到第二个Activity的程序应该都会写,这里先稍稍把两个Activity跳转的代码建起来。后面再添加EventBus相关的玩意。

MainActivity布局(activity_main.xml)


    
    
新建一个Activity,SecondActivity布局(activity_second.xml)


    
MainActivity.java (点击btn跳转到第二个Activity)
public class MainActivity extends Activity {

	Button btn;

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

		btn = (Button) findViewById(R.id.btn_try);

		btn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(getApplicationContext(),
						SecondActivity.class);
				startActivity(intent);
			}
		});
	}

}
到这,基本框架就搭完了,下面开始按步骤使用EventBus了。

2、新建一个类FirstEvent

package com.harvic.other;

public class FirstEvent {

	private String mMsg;
	public FirstEvent(String msg) {
		// TODO Auto-generated constructor stub
		mMsg = msg;
	}
	public String getMsg(){
		return mMsg;
	}
}
这个类很简单,构造时传进去一个字符串,然后可以通过getMsg()获取出来。

3、在要接收消息的页面注册EventBus:

在上面的GIF图片的演示中,大家也可以看到,我们是要在MainActivity中接收发过来的消息的,所以我们在MainActivity中注册消息。

通过我们会在OnCreate()函数中注册EventBus,在OnDestroy()函数中反注册。所以整体的注册与反注册的代码如下:

package com.example.tryeventbus_simple;

import com.harvic.other.FirstEvent;

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

public class MainActivity extends Activity {

	Button btn;
	TextView tv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
                //注册EventBus
		EventBus.getDefault().register(this);

		btn = (Button) findViewById(R.id.btn_try);
		tv = (TextView)findViewById(R.id.tv);

		btn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(getApplicationContext(),
						SecondActivity.class);
				startActivity(intent);
			}
		});
	}
	@Override
	protected void onDestroy(){
		super.onDestroy();
		EventBus.getDefault().unregister(this);//反注册EventBus
	}
}

4、发送消息

发送消息是使用EventBus中的Post方法来实现发送的,发送过去的是我们新建的类的实例!

EventBus.getDefault().post(new FirstEvent("FirstEvent btn clicked"));

完整的SecondActivity.java的代码如下:

package com.example.tryeventbus_simple;

import com.harvic.other.FirstEvent;

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

public class SecondActivity extends Activity {
	private Button btn_FirstEvent;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		btn_FirstEvent = (Button) findViewById(R.id.btn_first_event);

		btn_FirstEvent.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				EventBus.getDefault().post(
						new FirstEvent("FirstEvent btn clicked"));
			}
		});
	}
}

5、接收消息

接收消息时,我们使用EventBus中最常用的onEventMainThread()函数来接收消息,具体为什么用这个,我们下篇再讲,这里先给大家一个初步认识,要先能把EventBus用起来先。

在MainActivity中重写onEventMainThread(FirstEvent event),参数就是我们自己定义的类:

在收到Event实例后,我们将其中携带的消息取出,一方面Toast出去,一方面传到TextView中;

	public void onEventMainThread(FirstEvent event) {

		String msg = "onEventMainThread收到了消息:" + event.getMsg();
		Log.d("harvic", msg);
		tv.setText(msg);
		Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
	}

完整的MainActiviy代码如下:

package com.example.tryeventbus_simple;

import com.harvic.other.FirstEvent;

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

public class MainActivity extends Activity {

	Button btn;
	TextView tv;

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

		EventBus.getDefault().register(this);

		btn = (Button) findViewById(R.id.btn_try);
		tv = (TextView)findViewById(R.id.tv);

		btn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(getApplicationContext(),
						SecondActivity.class);
				startActivity(intent);
			}
		});
	}

	public void onEventMainThread(FirstEvent event) {

		String msg = "onEventMainThread收到了消息:" + event.getMsg();
		Log.d("harvic", msg);
		tv.setText(msg);
		Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
	}

	@Override
	protected void onDestroy(){
		super.onDestroy();
		EventBus.getDefault().unregister(this);
	}
}
好了,到这,基本上算初步把EventBus用起来了,下篇再讲讲EventBus的几个函数,及各个函数间是如何识别当前如何调用哪个函数的。


如果我的文章有帮到你,请关注哦。

源码地址:http://download.csdn.net/detail/harvic880925/8111357

请大家尊重原创者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/40660137   谢谢!


147
3
 
 

我的同类文章

5、andriod开发(148)
http://blog.csdn.net

参考知识库

更多资料请参考:
猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
个人资料
EventBus使用详解(一)——初步使用EventBus_第1张图片
harvic880925
1
  • 访问:2674557次
  • 积分:19446
  • 等级:
    积分:19446
  • 排名:第310名
  • 原创:227篇
  • 转载:35篇
  • 译文:0篇
  • 评论:2136条
我的新浪微博
交流群来啦 新建了一个交流群,大家可以加入
QQ群号一(已满):304235209
QQ群号二:554244703

博主需要你!!!
博主正在参加2016年度博客之星评选,如果博主的博客曾经帮助过您,请投我一票:http://blog.csdn.net/vote/candidate.html?username=harvic880925,万分感激

我的微信公众号

关注博主最新动态和干货分享,一周一次


另外:
想像一下当你想学一种知识,当你工作遇到瓶颈,当你无所适从……有没有想找一个领路人来指导自己。
我就是想做一个能找到领路人的APP,让它去辅助你完成你想做的事。如果你有这方面的需要或者建议或者想参与的话,请加Q: 1727082165 请让我听到你真实的声音。(其它勿加,谢谢)
博客专栏
EventBus使用详解(一)——初步使用EventBus_第2张图片 《Animation动画详解》

文章:13篇

阅读:134756
文章分类
  • ---------windows相关---------(0)
  • 1、C++/VC++相关(4)
  • -------1.1 C++基础学习心得(7)
  • -------1.2 MFC类的使用心得(12)
  • -------1.3数据库相关(0)
  • ------------1.3.1 数据库操作(7)
  • -----------1.3.2 mysql(2)
  • -------1.4 COM操作(1)
  • -------1.5 线程(2)
  • -------1.6 socket(6)
  • -------1.7 excel操作(2)
  • -------1.8 WIN32(30)
  • 2、界面开发(3)
  • -------2.1 MFC 界面美化(9)
  • -------2.2 directUI(5)
  • -------2.3 Duilib(5)
  • -------2.4 GDI+(18)
  • 3、视频开发(3)
  • -------3.1 directShow(2)
  • -------3.2 FFMPEG(1)
  • -------3.3 openCV(1)
  • 4、PHP & B/S(0)
  • -------4.1 PHP 相关(0)
  • --------------4.1.1 PHP(10)
  • --------------4.1.2 zend(2)
  • ---------4.2 HTML相关(0)
  • --------------4.2.1 HTML(1)
  • --------------4.2.2 CSS(3)
  • -------4.3 JS/JQuery(2)
  • --------------4.3.1 JS(9)
  • --------------4.3.2 JQuery(9)
  • --------------4.3.2 JQueryUI(1)
  • 5、andriod开发(149)
  • 6、数据结构/算法(0)
  • -------6.1 数据结构(2)
  • 7、面试(0)
  • -------7.1 面试(2)
  • 8、C#(1)
  • 9、其它(4)
  • -------9.1 Grid++Report(1)
  • linux(2)
文章存档
2016年09月 (1) 2016年08月 (1) 2016年07月 (3) 2016年06月 (2) 2016年05月 (4) 2016年04月 (5) 2016年03月 (6) 2016年02月 (3) 2016年01月 (6) 2015年12月 (1) 2015年11月 (6) 2015年10月 (2) 2015年08月 (3) 2015年07月 (3) 2015年06月 (2) 2015年05月 (1) 2015年04月 (10) 2015年03月 (7) 2015年01月 (4) 2014年12月 (6) 2014年11月 (4) 2014年10月 (7) 2014年09月 (5) 2014年08月 (15) 2014年07月 (7) 2014年06月 (4) 2014年05月 (6) 2014年04月 (7) 2014年03月 (2) 2014年01月 (10) 2013年12月 (17) 2013年11月 (4) 2013年10月 (1) 2013年09月 (3) 2013年08月 (3) 2013年07月 (7) 2013年06月 (11) 2013年05月 (15) 2013年04月 (14) 2013年03月 (7) 2013年01月 (8) 2012年12月 (6) 2012年11月 (1) 2012年09月 (5) 2012年07月 (7) 2012年06月 (14)
阅读排行
  • EventBus使用详解(一)——初步使用EventBus(207273)
  • PullToRefresh使用详解(一)--构建下拉刷新的listView(133917)
  • android sdk离线安装(112860)
  • ViewPager 详解(一)---基本入门(83038)
  • EventBus使用详解(二)——EventBus使用进阶(70515)
  • 获取Android签名证书的sha1值(60381)
  • ViewPager 详解(二)---详解四大函数(59544)
  • ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同(52561)
  • ViewPager 详解(五)-----使用Fragment实现ViewPager滑动(52392)
  • PullToRefresh使用详解(五)--下拉刷新的ScrollView(49820)
评论排行
  • android sdk离线安装(150)
  • EventBus使用详解(一)——初步使用EventBus(110)
  • Android自定义控件三部曲文章索引(74)
  • EventBus使用详解(二)——EventBus使用进阶(71)
  • 自定义控件之绘图篇(四):canvas变换与操作(65)
  • ViewPager 详解(一)---基本入门(60)
  • PullToRefresh使用详解(一)--构建下拉刷新的listView(57)
  • ViewPager 详解(二)---详解四大函数(56)
  • ViewPager 详解(四)----自主实现滑动指示条(46)
  • 自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法(46)
最新评论
  • 自定义控件三部曲之绘图篇(八)——Paint之ColorMatrix与滤镜效果

    qq_34185970:讲的很详实,浅显易懂,得亏现在正在上大学,要是过几年再学,线性的知识估计早就还给老师了。LZ写的太好...

  • 自定义控件之绘图篇(三):区域(Range)

    qq_34185970:易懂,好文!!!

  • ViewPager 详解(一)---基本入门

    qq_35596365:写的很详细,易懂 ,万分感谢

  • Fragment跳转时传递参数及结果回传的方法

    Mr_Scarro:博主 ,求解你的效果为什么不会重叠?

  • 自定义控件三部曲之绘图篇(十)——Paint之setXfermode(一)

    harvic880925:@u012904351:很感谢你思考得出的精辟评论,当然在理解了公式以后,再回来看Google的例子...

  • 自定义控件三部曲之绘图篇(八)——Paint之ColorMatrix与滤镜效果

    zqhcxy:大大分析清晰易懂,精华~~~ 忍不住评论赞叹支持下!!!

  • 自定义控件三部曲之动画篇(九)——联合动画的代码实现

    fanxl10:写的非常好,很详细,楼主辛苦了!

  • 自定义控件三部曲之绘图篇(六)——Path之贝赛尔曲线和手势轨迹、水波纹效果

    jasonhww:@qfanmingyiq:我也有点纠结这个问题.

  • PopUpWindow使用详解(二)——进阶及答疑

    ttbbgca:大神!你是电你是光!

  • 自定义控件三部曲之动画篇(九)——联合动画的代码实现

    baidu_33881658:不错,继续更新啊

你可能感兴趣的:(android)