Android页面事件挂接模拟

青春须早为,岂能长少年。这篇文章主要讲述Android页面事件挂接模拟相关的知识,希望能为你提供帮助。
java没有C#的引用类型。因此事件的挂接一般都是利用接口来实现,有两种方式:
1)定义一个实现事件接口的类,然后实现接口方法,然后通过将这个类的实例加入到事件监听器里面:

public class OnClickListenerHdlimplements 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页面事件挂接模拟】
??

    推荐阅读