Android实战简易教程-第五十九枪(EventBus小实例-传值、控制其他页控件显示)

页面之间的传值,有android基础的童鞋都会知道,可以通过Intent进行传值,但是动态控制另一个页面控件的显示恐怕这个就不好用了吧,下面我们介绍一个比较好用的框架-EventBus,通过实例介绍它的使用(要引入jar包才能使用EventBus,jar包在源码下载中)。

一、介绍一下EventBus

使用EventBus的步骤:

1.新建一个类:作为消息类

/**
 *
 */
package com.example.eventbusdemo;

/**
 * @author yayun
 * @since 2015年9月14日
 *
 */
public class TestEvent {
	private String mMsg;

	public TestEvent(String mMsg) {
		this.mMsg = mMsg;
	}

	public String getMsg() {
		return mMsg;
	}
}

2.在onCreate()方法出注册:

EventBus.getDefault().register(this);// 注册EventBus

3.创建方法接收传值:

public void onEventMainThread(TestEvent testEvent){
		String mString="收到消息"+testEvent.getMsg();
		mTextView.setText(mString);
	    mButton2.setVisibility(View.GONE);

	}

4.在onDestory()中取消注册:

@Override
	protected void onDestroy() {
		super.onDestroy();
		EventBus.getDefault().unregister(this);//取消注释
	}

5.发送消息

EventBus.getDefault().post(new TestEvent("button2消失"));//发送消息

顺序不分先后,不要忘记就好了。

二、示例代码

1.第一个页面:

package com.example.eventbusdemo;

import com.ypy.eventbus.EventBus;

import android.app.Activity;
import android.content.Intent;
import android.drm.DrmManagerClient.OnEventListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

/**
 * @author yayun
 * @since 2015年9月14日
 *
 */
public class MainActivity extends Activity implements OnClickListener {
	private Button mButton1, mButton2;
	private TextView mTextView;

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

	/**
	 * 方法说明
	 *
	 * @author yayun
	 * @since 2015年9月14日
	 */
	private void initViews() {
		mButton1 = (Button) findViewById(R.id.btn_main);
		mButton2 = (Button) findViewById(R.id.btn_main_2);
		mTextView = (TextView) findViewById(R.id.tv_main);
		mButton1.setOnClickListener(this);

	}
	/**
	 *
	 * 接收消息的方法
	 * @author yayun
	 * @since 2015年9月14日
	 *@param testEvent
	 */
	public void onEventMainThread(TestEvent testEvent){
		String mString="收到消息"+testEvent.getMsg();
		mTextView.setText(mString);
	    mButton2.setVisibility(View.GONE);

	}

	/*
	 * (non-Javadoc)
	 *
	 * @see android.view.View.OnClickListener#onClick(android.view.View)
	 */
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_main:
			Intent intent = new Intent(MainActivity.this, Second.class);
			startActivity(intent);
			break;

		default:
			break;
		}

	}
	/* (non-Javadoc)
	 * @see android.app.Activity#onDestroy()
	 */
	@Override
	protected void onDestroy() {
		super.onDestroy();
		EventBus.getDefault().unregister(this);//取消注释
	}

}

第二个页面:

/**
 *
 */
package com.example.eventbusdemo;

import com.ypy.eventbus.EventBus;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;

/**
 * @author yayun
 * @since 2015年9月14日
 *
 */
public class Second extends Activity{
	private Button mButtonSecond;
	/* (non-Javadoc)
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_second);
		mButtonSecond=(Button) findViewById(R.id.btn_second);
		mButtonSecond.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				EventBus.getDefault().post(new TestEvent("button2消失"));//发送消息

			}
		});
	}

}

3.第一页的布局文件:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.eventbusdemo.MainActivity" >

    <Button
        android:id="@+id/btn_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Main Button" />

    <Button
        android:id="@+id/btn_main_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_main"
        android:text="Main Button2" />

    <TextView
        android:id="@+id/tv_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_main_2"
        android:text="Main TextView" />

</RelativeLayout>

4.第二页的布局文件:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.eventbusdemo.MainActivity" >

    <Button
        android:id="@+id/btn_second"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Second Button" />

</RelativeLayout>

运行实例如下:

可以看到在点击了第一个页面的Button之后,将值传入到了第一个页面,且第一个页面的Button2不见了。我们可以想象一下,这种机制可以用在什么地方?

在设置页面控制某一个页面某个控件的显示?是不是类似广播的效果?

喜欢的朋友请关注我!谢谢您的支持!~

源码下载

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-15 01:46:56

Android实战简易教程-第五十九枪(EventBus小实例-传值、控制其他页控件显示)的相关文章

Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)

用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以自行注册,得到APPKEY和APPSECRET,然后下载SDK,包的导入方式如截图: 二.主要代码 SMSSendForRegisterActivity.java:(获取验证码页) package com.qiandaobao.activity; import java.util.regex.Mat

Android实战简易教程-第五十八枪(AlarmManager类用法研究小实例)

一.概念及相关方法 android中实现定时任务一般有两种实现方式,一种是使用Java API中提供的Timer类,一种是使用android的Alarm机制.Timer机制有个短板就是不太适用于那些需要长期在后台运行的任务,我们都知道为了让电池更加耐用,会在长时间不操作手机的情况下,CPU进入休眠状态,这是可能导致Timer中的定时任务无法正确运行.所以我们重点来研究一下Alarm机制. AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,

Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)

用过美团客户端的朋友都知道,美团的加载等待提示很有意思,是一种动画的形式展现给我们,下面我们就对这背后的原理进行了解,然后实现自己的等待动画效果. 首先我们准备两张图片: 这两张图片看起来一模一样啊?细心的朋友会发现唯一不同的就在脚部,OK,我们就利用这两张图片的轮换播放实现动画效果,下面看一下代码: 1.动画文件frame_meituan.xml: <?xml version="1.0" encoding="utf-8"?> <animation

Android实战简易教程-第四十九枪(两种方式实现网络图片异步加载)

加载图片属于比较耗时的工作,我们需要异步进行加载,异步加载有两种方式:1.通过AsyncTask类进行:2.通过Handler来实现,下面我们就来看一下如何通过这两种方式实现网络图片的异步加载. 一.AsyncTask方式 1.main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.co

Android实战简易教程-第六十九枪(自定义控件实现雪花飘落效果)

现在APP要求越来越高了,不只是要求实现功能,颜值的要求也越来越高,下面我们通过自定义控件来实现雪花飘落的效果,可以作为界面背景哦. 1.自定义控件: package com.test.a; import java.util.Random; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Can

Android实战简易教程-第五十四枪(通过实现OnScrollListener接口实现下拉刷新功能)

上一篇文章Android实战简易教程-第五十三枪(通过实现OnScrollListener接口实现上拉加载更多功能)讲述了如何实现上拉加载更多的功能,本篇,我们在上一篇的基础上实现下拉刷新功能.主要通过对滚动状态和手势监听实现这一功能,下面我们看一下代码: 1.header.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sch

Android实战简易教程-第五十五枪(窃听风云之电话录音上传)

前一段时间我写过一篇关于短信监听的文章Android实战简易教程-第四十枪(窃听风云之短信监听),话说现在短信用的越来越少了啊,下面来个更猛的,电话录音监听上传,电话接通后开始录音,电话挂断后将录音上传.这里我们还是借助Bmob提供的上传服务,将录音文件上传到bomb的服务器,可以自行下载,播放录音. 一.配置bmob 配置bmob服务很是简单,注册账号,下载jar包,将jar包引入libs文件目录下: 然后配置权限: <uses-permission android:name="andr

Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)

前段时间写过一篇文章:Android实战简易教程-第四十七枪(ListView多选-实现点餐系统)有的同学留言建议,可不可以动态控制checkbox的显示和全选反选功能,我研究了一下,发现实现也比较容易,特写下此篇文章.学习就是要有发散思维,要举一反三,大家也可以根据我的实例进行改编,添加和删除一些功能,这样可以提高你对知识的认知!下面我们看一下代码: 1.main.xml: <?xml version="1.0" encoding="utf-8"?>

Android实战简易教程-第四十八枪(App引导页面效果实现)

经常使用APP的童鞋会发现,第一次进入APP会有引导页面,里面可以放一些APP的使用介绍或其他信息等等,下面我们研究一下如何实现这个功能,增加APP的体验. 一.自定义控件继承ViewGroup: package com.genius.scroll; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.util