Android页面事件挂接模拟
Java没有C#的引用类型。因此事件的挂接一般都是利用接口来实现,有两种方式:
1)定义一个实现事件接口的类,然后实现接口方法,然后通过将这个类的实例加入到事件监听器里面:
public class OnClickListenerHdl implements View.OnClickListener
{ @Override
public void onClick(View v) {
// TODO 自己主动生成的方法存根 } }
使用:
_Button1.setOnClickListener(new OnClickListenerHdl());
2)定义一个匿名式的类来完毕:
_Button1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO 自己主动生成的方法存根
}
});
採用第1种方式尽管比較明了,但有一个非常不利的地方,就是页面事件处理的时候会訪问其他页面控件,这样的方式会添加非常多參数的传递。对于页面处理这样的方式有一个非常好的设计模式--中介者模式(也叫集市模式),全部页面控件的交互和事件响应都放在一个中介类中(通常是页面相应的Activity).
第2种方式比第一种方式要好,至少代码的聚合度比較高,并且能够訪问一定的公共变量,但须要注意的是在事件处理方法中的this并非指中介Activity.
安卓的视图中的方法绑定机制是最好的
android:onClick="DoClick"
相应的Activity中仅仅要有一个符合规范的DoClick方法。这就跟C#的处理方式差点儿相同,但事实上现预计比較曲折。我以下做了一个模拟:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_MainActivity = this;
_Abc="hello you are good!";
_Button1 = (Button)this.findViewById(R.id.button1);
//注意这里的调用。这个能够在载入XML文件时动态实现.
_Button1.setOnClickListener(CreateClickListener(this,"DoClick",_Button1));
_Button1.setOnClickListener(new OnClickListener(){ @Override
public void onClick(View v) {
// TODO 自己主动生成的方法存根 } }); }
//这种方法对于Click事件来说是通用的。其他事件能够相似处理。
private OnClickListener CreateClickListener(final Activity Handler,final String MethodName,final View v)
{
return new OnClickListener(){
@Override
public void onClick(View v) {
Class<?> theTypeView=null;
try {
theTypeView = Class.forName("android.view.View");
} catch (ClassNotFoundException e1) {
// TODO 自己主动生成的 catch 块
e1.printStackTrace();
}
if(theTypeView != null)
{
try {
Method theClickMethod= Handler.getClass().getMethod(MethodName, theTypeView);
if(theClickMethod!=null)
{
theClickMethod.invoke(Handler, v);
}
} catch (NoSuchMethodException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
}
} }
};
}
public void DoClick(View Button2)
{
Button theButton2 = (Button)Button2;
theButton2.setText("hello,"+theButton2.getText());
}
至于Android是不是採用相似方法处理。就不是非常清楚了。
但鉴于Java的语言机制,预计也仅仅能这样干。
Android页面事件挂接模拟的更多相关文章
- js android页面被挂起问题解决
问题: 页面上设了定时器,但浏览器后台运行被挂起时,页面定时器暂停 解决: 向服务器发送同步请求,服务器延时1秒返回.页面收到返回时再次发送请求 服务器相当于起博器,维持页面将停的心跳
- 关于asp.net中页面事件加载的先后顺序
一.ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件 ...
- Android Touch事件传递机制通俗讲解
在讲正题之前我们讲一段有关任务传递的小故事,抛砖迎玉下: 话说一家软件公司,来一个任务,分派给了开发经理去完成: 开发经理拿到,看了一下,感觉好简单,于是 开发经理:分派给了开发组长 开发组长:分派给 ...
- 初识Android触摸事件传递机制
前言 今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外,View的另外一个难题滑动冲突,比如在ScrollView中嵌套Li ...
- Android触摸事件的应用
前言 上一篇讲了Android触摸事件的传递机制,具体可以看这里 初识Android触摸事件传递机制.既然知道Android中触摸事件的传递分发,那么它能解决什么样的问题,在我们实际开发中如何应用,这 ...
- javaScript事件机制深入学习(事件冒泡,事件捕获,事件绑定方式,移除事件方式,阻止浏览器默认行为,事件委托,模拟浏览器事件,自定义事件)
前言 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码.这种在传统软 ...
- 页面事件(Init,Load,PreRender)执行顺序
简介 对由 Microsoft® Internet 信息服务 (IIS) 处理的 Microsoft® ASP.NET 页面的每个请求都会被移交到 ASP.NET HTTP 管道.HTTP 管道由一系 ...
- Android Touch事件传递机制 二:单纯的(伪生命周期)
转载于:http://blog.csdn.net/yuanzeyao/article/details/38025165 在前一篇文章中,我主要讲解了Android源码中的Touch事件的传递过程,现在 ...
- Android Touch事件传递机制 一: OnTouch,OnItemClick(监听器),dispatchTouchEvent(伪生命周期)
ViewGroup View Activity dispatchTouchEvent 有 有 有 onInterceptTouchEvent 有 无 无 onTouchEvent 有 有 有 例 ...
随机推荐
- HDU 1043 Eight (A*算法)
题目大意:裸的八数码问题,让你输出空格的一条合法移动路径 首先利用康托展开对排列编号,可以预处理出排列,就不必逆展开了 然后利用A*算法求解 A*算法是一种启发式搜索,具体实现要用到优先队列/堆,不同 ...
- 入门python:《Python编程快速上手让繁琐工作自动化》中英文PDF+代码
入门推荐学习<python编程快速上手>前6章是python的基础知识,通俗易懂地讲解基础,初学者容易犯错的地方,都会指出来.从第三章开始,每章都有一个实践项目,用来巩固前面所学的知识. ...
- 抓取豆瓣的电影排行榜TOP100
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 一个简单的Python爬虫, 用于抓取豆瓣电影Top前100的电影的名称 ...
- LINUX命令LS -AL 解析
LINUX命令LS -AL 解析 linux命令ls -al 解析 ls是“list”的意思,与早期dos的命令dir功能类似.参数-al则表示列出所有的文件,包括隐藏文件,就是文件前面第一个字符为. ...
- Hibernate中如何完成持久化类和数据库映射文件
因为最近写项目需要要到,就在这里码码字,方便以后做一个参考,在这里,我通过的是myeclipse的反向工程来配置持久化类和数据的映射文件的. 1.打开myeclipse,打开数据库视图,对应的是Win ...
- Object-C,数组NSArray
晚上回来,写了2个iOS应用程序. 就是在界面中,展示标签.一种是手动构造界面,然后绑定事件.另外一种是,使用自带的界面作为容器,但是手动向里面放其它界面元素. 书中的观点是,使用图形化界面,构造界面 ...
- Android实战简易教程-第二十八枪(Uri转String型实例)
接上一篇文章.我们能够轻易的获取所选图片的uri,那么我们考虑怎样将获取的uri转换成String型的地址呢? 接下来我们通过实例来研究.布局文件和上篇(二十七枪)一致,我们就不再列出,直接看Main ...
- 广东省知名P2P平台资料
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXNrYmFpNjY2ODg4/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- BAPC2014 K&&HUNNU11591:Key to Knowledge(中途相遇法)
题意: 有N个学生.有M题目 然后相应N行分别有一个二进制和一个整数 二进制代表该同学给出的每道题的答案.整数代表该同学的答案与标准答案相符的个数 要求推断标准答案有几个,假设标准答案仅仅有一种.则输 ...
- 图论之堆优化的Prim
本题模板,最小生成树,洛谷P3366 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边 ...