• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android基于监听的事件处理机制

Android基于监听的事件处理机制

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android事件分发机制,android事件传递机制,android事件处理机制,android事件机制,android handler机制等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android基于监听的事件处理机制


Android提供了强大的事件处理机制,主要包括两大类:

1,基于监听的事件处理机制:主要做法是为Android界面组件绑定特定的事件监听器

2,基于回调的事件处理机制:主要做法是重写Android组件特定的回调方法,或重写Activity的回调方法。也就是说Android的绝大多数的界面组件都提供了事件响应的回调方法,开发者只要重写它们即可

 

基于监听的事件处理是一种更加面向对象的事件处理,这种事件处理方式与Java的Swing处理方式几乎相同。

监听处理模型:

事件源(Event Source):事件发生的场所,就是各个组件,比如按钮,窗口,菜单等

事件(Event):事件封装了界面组件上发生的特定事情(就是用户操作)。如果程序需要获得界面组件上所发生事件的相关信息,一般通过Event对象来获取

事件监听器(Event Listener):负责监听事件源所发生的时间,并且对各个事件作出响应。

委派式事件处理方法:

普通组件(事件源)将整个事件处理委派给特定的对象(事件监听器);当该事件源发生指定的时间是,就通知所委派的事件监听器来处理这个事件。

每个组件都可以针对特定的时间指定一个事件监听器,每个事件监听器也可以监听一个或多个事件源。因为同一个事件源上可能发生多个事件,委派式事件处理方式可以吧事件源上所有可能发生的时间分别授权给不同的事件处理器来处理;同时也可以让一类事件都使用同一个事件监听器来处理。

\

activity_main.xml

<!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal">
<edittext android:id="@+id/txt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" android:cursorvisible="false" android:textsize="12pt">
<!--{cke_protected}{C}%3C!%2D%2D%20%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E6%8C%89%E9%92%AE%EF%BC%8C%E8%AF%A5%E6%8C%89%E9%92%AE%E5%B0%86%E4%BD%9C%E4%B8%BA%E4%BA%8B%E4%BB%B6%E6%BA%90%20%2D%2D%3E--><button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="单击我"></button></edittext></linearlayout>
MainActivity.java
public class MainActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取应用程序中的bn按钮
		Button bn = (Button) findViewById(R.id.bn);
		// 为按钮绑定事件监听器。
		bn.setOnClickListener(new MyClickListener()); // ①
	}

	// 定义一个单击事件的监听器
	class MyClickListener implements View.OnClickListener
	{
		// 实现监听器类必须实现的方法,该方法将会作为事件处理器
		@Override
		public void onClick(View v)
		{
			EditText txt = (EditText) findViewById(R.id.txt);
			txt.setText("bn按钮被单击了!");
		}
	}
}
基于监听器的事件处理模型的编程步骤如下:

 

1,获取普通界面组件(事件源),也就是被监听的对象

2,实现时间监听类,该监听器类是一个特殊的Java类,必须实现一个XxxListener接口

3,调用事件源的setXXXListener方法,将事件监听器对象注册给普通组件(事件源)

 

事件监听器必须实现事件监听接口,Android的不同界面组件提供了不同的监听器接口,这些接口通常以内部类的形式存在。以View类为例,包含如下监听接口:

View.OnClickListener单击事件的事件监听器必须时间的接口

View.OnCreateContextMenuListener:创建上下文菜单时间的事件监听器必须实现的接口

View.onFocusChangeListener:焦点改变事件的事件监听器必须实现的接口

View.OnKeyListener:按键事件的时间监听器必须实现的接口

所谓事件监听器,其实就是实现了特定接口的java类的实例。在程序上一般有几种形式:

1,内部类形式:将事件监听器定义成当前类的内部类

 

public class EventQs extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取应用程序中的bn按钮
		Button bn = (Button) findViewById(R.id.bn);
		// 为按钮绑定事件监听器。
		bn.setOnClickListener(new MyClickListener()); // 
	}

	// 定义一个单击事件的监听器,内部类形式
	class MyClickListener implements View.OnClickListener
	{
		// 实现监听器类必须实现的方法,该方法将会作为事件处理器
		@Override
		public void onClick(View v)
		{
			EditText txt = (EditText) findViewById(R.id.txt);
			txt.setText("bn按钮被单击了!");
		}
	}
}
因为监听器是内部类,所以可以自由访问外部类的所有界面组件,这也是内部类的优势。

 

2,外部类形式:将事件监听器类定义成一个外部类

外部类形式的事件监听器不能自由访问创建GUI界面类的组件,使用时需要向监听器类传递GUI界面类的组件的引用 ,所以用的比较少

MainActivity.java

 

public class MainActivity extends Activity
{
	EditText address;
	EditText content;
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取页面中收件人地址、短信内容
		address = (EditText)findViewById(R.id.address);
		content = (EditText)findViewById(R.id.content);
		Button bn = (Button)findViewById(R.id.send);
		bn.setOnLongClickListener(new SendSmsListener(
			this , address, content));//外部类形式,需要传递本类组件
	}
}
SendSmsListener.java

 

 

public class SendSmsListener implements OnLongClickListener
{
	private Activity act;
	private EditText address;
	private EditText content;

	public SendSmsListener(Activity act, EditText address
		, EditText content)
	{
		this.act = act;
		this.address = address;
		this.content = content;
	}

	@Override
	public boolean onLongClick(View source)
	{
		String addressStr = address.getText().toString();
		String contentStr = content.getText().toString();
		// 获取短信管理器
		SmsManager smsManager = SmsManager.getDefault();
		// 创建发送短信的PendingIntent
		PendingIntent sentIntent = PendingIntent.getBroadcast(act
			, 0, new Intent(), 0);
		// 发送文本短信
		smsManager.sendTextMessage(addressStr, null, contentStr
			, sentIntent, null);
		Toast.makeText(act, "短信发送完成", Toast.LENGTH_LONG).show();
		return false;
	}
}

 

3,Activity本身作为事件监听器类:让Activity本身实现监听接口,并实现事件处理器方法

 

// Activity实现事件监听器接口
public class ActivityListener extends Activity
	implements OnClickListener
{
	EditText show;
	Button bn;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		show = (EditText) findViewById(R.id.show);
		bn = (Button) findViewById(R.id.bn);
		// 直接使用Activity作为事件监听器
		bn.setOnClickListener(this);
	}

	// 实现事件处理方法
	@Override
	public void onClick(View v)
	{
		show.setText("bn按钮被单击了!");
	}
}

 

4,匿名内部类形式:使用匿名内部类创建事件监听器对象。代码简单的情况,只能用一次

 

public class MainActivity extends Activity
{
	EditText show;
	Button bn;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		show = (EditText) findViewById(R.id.show);
		bn = (Button) findViewById(R.id.bn);
		// 直接使用Activity作为事件监听器
		bn.setOnClickListener(new OnClickListener()
		{
			// 实现事件处理方法
			@Override
			public void onClick(View v)
			{
				show.setText("bn按钮被单击了!");
			}
		});
	}

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android事件分发机制浅谈(一),android浅谈
  • Android开发2:事件处理及实现简单的对话框,android开发
  • Android面试题--事件处理,android试题--事件
  • Android中事件的分发机制
  • Android防止过快点击造成多次事件
  • Android事件分发
  • android的消息机制
  • Android_事件纷发
  • Android事件分发机制总结
  • Android基于监听的事件处理机制

相关文章

  • 2017-05-26对Android的恶意吐槽(勿看,有毒)
  • 2017-05-26【React Native开发】React Native控件之ProgressBarAndroid进度条讲解(12)
  • 2017-07-23从头开始学RecyclerView(六)LayoutManager
  • 2017-05-26Android性能优化之Bitmap的内存优化
  • 2017-05-26HTTP 首部字段详细介绍,首部字段详细介绍
  • 2017-05-26Android Studio 2.2.2导入Eclipse中创建的项目,androideclipse
  • 2017-05-26解决Android Graphical Layout 界面效果不显示,androidgraphical
  • 2017-05-26Unity实现滑页嵌套(解决ScrollRect嵌套冲突问题)
  • 2017-05-26Android 中基于 Binder的进程间通信,androidbinder
  • 2017-05-26Kotlin的android扩展:对findViewById说再见(KAD 04),kotlinfindviewbyid

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android搜索功能的案例,本地保存搜索历史记录
    • Android中使用Handler以及CountDownTimer实现包含倒计时的闪屏页面,countdownview倒计时
    • [android] 手机卫士保存密码时进行md5加密,androidmd5
    • Android TabHost使用,androidtabhost使用
    • android:webview实现简单的浏览器
    • 编译android源码3---ubuntu安装jdk6
    • 高效地分析Android内存--MAT工具解析
    • android button的操作
    • Google官方MVP模式示例项目解析 todo-mvp,mvptodo-mvp
    • 2.3.9 RatingBar(星级评分条)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有