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页面事件挂接模拟的更多相关文章

  1. js android页面被挂起问题解决

    问题: 页面上设了定时器,但浏览器后台运行被挂起时,页面定时器暂停 解决: 向服务器发送同步请求,服务器延时1秒返回.页面收到返回时再次发送请求 服务器相当于起博器,维持页面将停的心跳

  2. 关于asp.net中页面事件加载的先后顺序

    一.ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序.对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件.控件事件 ...

  3. Android Touch事件传递机制通俗讲解

    在讲正题之前我们讲一段有关任务传递的小故事,抛砖迎玉下: 话说一家软件公司,来一个任务,分派给了开发经理去完成: 开发经理拿到,看了一下,感觉好简单,于是 开发经理:分派给了开发组长 开发组长:分派给 ...

  4. 初识Android触摸事件传递机制

    前言 今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外,View的另外一个难题滑动冲突,比如在ScrollView中嵌套Li ...

  5. Android触摸事件的应用

    前言 上一篇讲了Android触摸事件的传递机制,具体可以看这里 初识Android触摸事件传递机制.既然知道Android中触摸事件的传递分发,那么它能解决什么样的问题,在我们实际开发中如何应用,这 ...

  6. javaScript事件机制深入学习(事件冒泡,事件捕获,事件绑定方式,移除事件方式,阻止浏览器默认行为,事件委托,模拟浏览器事件,自定义事件)

    前言 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码.这种在传统软 ...

  7. 页面事件(Init,Load,PreRender)执行顺序

    简介 对由 Microsoft® Internet 信息服务 (IIS) 处理的 Microsoft® ASP.NET 页面的每个请求都会被移交到 ASP.NET HTTP 管道.HTTP 管道由一系 ...

  8. Android Touch事件传递机制 二:单纯的(伪生命周期)

    转载于:http://blog.csdn.net/yuanzeyao/article/details/38025165 在前一篇文章中,我主要讲解了Android源码中的Touch事件的传递过程,现在 ...

  9. Android Touch事件传递机制 一: OnTouch,OnItemClick(监听器),dispatchTouchEvent(伪生命周期)

      ViewGroup View  Activity dispatchTouchEvent 有 有 有 onInterceptTouchEvent 有 无 无 onTouchEvent 有 有 有 例 ...

随机推荐

  1. [Debug]SpaceVim中neomake报错 Error while trying to load a compilation database

    回家装上archlinux,突发奇想装个SpaceVim写题 安装配置一路可以说是没有太大问题 最后在写题时出现如下问题 Error while trying to load a compilatio ...

  2. BZOJ 2342 [Shoi2011]双倍回文(manacher+堆+set)

    题意 N<=500000 题解 维护一个set可以用堆来解决. #include<iostream> #include<cstring> #include<cstd ...

  3. sort排序到底怎么排序

    sort()方法 sort() 方法在适当的位置对数组的元素进行排序,并返回数组. <!DOCTYPE html> <html> <head> <meta c ...

  4. VUEJS开发规范

    VUEJS开发规范 基于组件化开发理解 组件命名规范 结构化规范 注释规范 编码规范 基于组件化开发理解 什么是组件? ``` 组件其实就是页面组成的一部分,好比是电脑中的每一个元件(如硬盘.键盘.鼠 ...

  5. P1017 进制转换 (负进制转换)

    和平常的转化差不多 加多一步 如果余数 < 0, 那么余数减去除数(此时除数是负),商数加1 #include<cstdio> #define _for(i, a, b) for(i ...

  6. Java基础学习总结(43)——Java8 Lambda揭秘

    再了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么?. 这是一个有趣的问题,涉及到JDK的具体的实现. 本文将介绍OpenJDK对L ...

  7. POJ——T2553 The Bottom of a Graph

    http://poj.org/problem?id=2553 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10987   ...

  8. iOS:UISplitViewController的创建

    UISplitViewController是iPad特有的系统方法,主要效果就是呈现iPad的经典切割界面 代码创建实例: - (BOOL)application:(UIApplication *)a ...

  9. 新手做2D手游该用哪些工具?

    全球手游行业规模将突破250亿美元,越来越多的开发者开始进入手游研发领域,而作为一名菜鸟,很多时候,如果没有其他开发者的建议,会走很多弯路.一开始进入游戏研发领域的时候,你很难知道该选择什么工具.什么 ...

  10. Mono源码学习笔记:Console类(四)

    NullStream 类 (internal class) 以下就是 mcs/class/corlib/System.IO/NullStream.cs: 01: namespace System.IO ...