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. sql拼接

    with t as( select 'Charles' parent, 'William' child union select 'Charles', 'Harry' union select 'An ...

  2. js的运算小数点的问题

    问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这 ...

  3. Webpack的作用(一个基础的打包编译工具在做什么?)

    结论: 转换ES6语法成ES5 处理模块加载依赖 生成一个可以在浏览器加载执行的 js 文件 第一个问题,转换语法,其实我们可以通过babel来做.核心步骤也就是: 通过babylon生成AST 通过 ...

  4. vue项目的webpack4.X配置

    这两天摆弄webpack,躺过很多坑,直到今天看了一位博主的文章才得以解决.他对配置中的各个部分做说明. 下面的配置99.9%抄自博主: https://www.cnblogs.com/nianyif ...

  5. BZOJ 5104 Fib数列(二次剩余+BSGS)

    斐波那契数列的通项: \[\frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})-(\frac{1-\sqrt{5}}{2}))\] 设T=\(\sqrt{5}*N\),\ ...

  6. luogu P2664 树上游戏(点分治)

    点分治真是一个好东西.可惜我不会 这种要求所有路经的题很可能是点分治. 然后我就不会了.. 既然要用点分治,就想,点分治有哪些优点?它可以\(O(nlogn)\)遍历分治树的所有子树. 那么现在的问题 ...

  7. 注解形式读取properties文件中的属性

    1.spring.xml中加入(多个properties 用逗号隔开)  <context:property-placeholder location="classpath:jdbc. ...

  8. 利用shell脚本添加环境变量

    在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误 error while loading shared lib ...

  9. 2015 Multi-University Training Contest 2 hdu 5306 Gorgeous Sequence

    Gorgeous Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  10. poj2280--Amphiphilic Carbon Molecules(扫描线+极角排序+转换坐标)

    题目链接:id=2280">点击打开链接 题目大意:给出n个点的坐标.每一个点有一个值0或者1,如今有一个隔板(无限长)去分开着n个点,一側统计0的个数,一側统计1的个数,假设点在板上 ...