2012年11月19日上午

问题1:Android提供了哪两种方式的事件处理?
基于回调的事件处理 和 基于监听器的事件处理。

问题2:什么是事件处理?
为用户动作提供响应的机制就是事件处理。

问题3:什么是 基于监听的事件处理?
主要做法就是为Android界面组件绑定特定的事件监听器。

问题4:什么是 基于回调的事件处理?
主要做法就是重写Android组件特定的回调方式,或者重写Activity的回调方法。
Android为绝大部分界面组件都提供了事件响应的回调方法,开发者只要重写它们即可。

问题5:基于回调的事件处理 和 基于监听的事件处理 有什么特点?
一般来说,基于回调的事件处理可用于处理一些具有通用性的事件,基于回调的事件处理代码会显
得比较简洁。但对于某些特定的事件,无法使用基于回调的事件处理,只能采用基于监听的事件处
理。

问题6:事件监听的处理模型中主要涉及哪几类对象?
在事件监听的处理模型中,主要涉及三类对象。
(1)EventSource(事件源):事件发生的场所,通常就是各个组件,例如按钮、窗口、菜单等。
(2)Event(事件):事件封装了界面组件上发生的特定事情(通常就是一次用户操作)。如果程
序需要获得界面组件上所发生事件的相关信息,一般通过Event对象来取得。
(3)EventListener(事件监听器):负责监听事件源所发生的事件,并对各种事件做出相应的响
应。

问题7:写一个简单的入门程序来示范简单的基于监听的事件处理模型。
步骤1:在界面布局中定义两个组件:一个文本框和一个按钮,界面布局代码如下。
<?xml version="1.0" encoding="utf-8"?>
<!-- android:gravity设置文本位置,如设置成“center”,文本将居中显示。 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rel"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- 一个编辑框 -->
<!-- 选项editable 类似于StringBuilder可追加字符 -->
<!-- android:cursorVisible设定光标为显示/隐藏,默认显示。 -->
<EditText android:id="@+id/txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginLeft="30dp"
android:editable="false"
android:cursorVisible="false"
android:textSize="12pt"
/>
<!-- 定义一个按钮,该按钮将作为事件源 -->
<!-- android:layout_below使当前控件位于给出id控件的下方 -->
<Button android:id="@+id/bn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/txt"
android:layout_marginTop="30dp"
android:layout_marginLeft="30dp"
android:text="单击我"
/>
</RelativeLayout>
上面的程序中定义的按钮将会作为事件源。
步骤2:接下来程序将会为该按钮绑定一个事件监听器----监听器类必须由开发者来实现。下面是
Java程序代码。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取应用程序中的按钮
Button bn=(Button)findViewById(R.id.bn);
//为按钮绑定事件监听器
bn.setOnClickListener(new MyClickListener()); //(1)
}
//定义一个单击事件的监听器
class MyClickListener implements View.OnClickListener{
//实现监听器类必须实现的方法,该方法将会作为事件处理器
public void onClick(View arg0) {
//获取文本框
EditText txt = (EditText)findViewById(R.id.txt);
//设置文本框内容
txt.setText("bn按钮被单击了!");
}

}

从上面的程序中可以看出,基于监听的事件处理模型的编程步骤如下。
(1)获取普通界面组件(事件源),也就是被监听的对象。
(2)实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一个XxxListener接口。
(3)调用事件源泉的setXxxListener方法将事件监听器对象注册给普通组件(事件源)。
当事件源泉上发生指定事件时,Android会触发事件监听器,由事件监听器调用相应的方法(事件处
理器)来处理事件。

posted @   zhongcx  阅读(93)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示