Mono for Android or Android 中的事件怎么写!

来源:互联网 发布:现在淘宝网什么好卖 编辑:程序博客网 时间:2024/06/09 06:21

今天就来说一说andorid的事件,作为自己养成写博客的开端。


直接入题:

安卓中的事件大致分为两类,基于监听和基于回调;


一、基于监听的事件

首先来说下事件处理过程中所包含的三个概念:事件源、事件、事件监听;


事件源:也就是事件发生的场所,在什么地方发生的,通常就是各个组件,比如按钮、菜单等;

事件:也就是发生了什么事情,比如点击、滑动等;

事件监听器:负责监听事件源所发生的事件;


事件监听的处理机制是一种委派式(Delegation)的处理方式:事件源将整个事件的处理委托给特定的对象,这个对象也就是事件监听器;当事件源发生特定事件就通知所委托的事件监听器,由事件监听器进行处理;

例:

Button  btn = FindViewById<Button>(Resource.Id.MyButton);btn.Click+=btn_Click; void btn_Click(object sender, EventArgs e){    btn.Text = "点击了Button"}

上面的写法是利用c#的事件委托来实现的,在C#中可以使用像在Java中的事件监听形式;

Button  btn = FindViewById<Button>(Resource.Id.MyButton);btn.SetOnClickListener(new MyButtonListener());public class MyButtonListener : Java.Lang.Object,View.IOnClickListener{}
这种形式就像原汁原味的事件监听方式。  上面的btn则为事件源,事件是Click事件,事件监听器就是MyButtonListener。

因为在c#里面没有匿名内部类这个东西(貌似是没有),所以常用委托的方式来实现事件监听。而在java代码中则通常使用匿名内部类来作为事件监听器,比如:

btn.setOnClickListener(    new OnClickListener(){        @override        public void onClick(View v){            btn.setText("点击了Button");        }    });

上面就可以简单对比下在c#和在java中对一个按钮实现事件监听;


二、基于事件回调

我们通常认为事件监听机制是一种委托式的事件机制,那么回调机制则恰好相反:对于基于监听的处理方式来说,事件源跟事件监听器是分离的,而对于基于回调的处理方式,事件源跟监听器是同一的,或者说事件监听器就不存在。当事件源被激发某个事件的时候,事件源自己的特定方法将会负责处理该事件;

我们无法为某个对象动态添加方法,因此只能继承组件类,并重写该类的事件处理方法来实现。

</pre><pre name="code" class="csharp">public Class MyButton : Button {    //重写事件方法    public override void OnClick(View v)    {    }}

额,大致就是类似这样的吧,乱写写,没怎么排版,随性而起。


注意:andorid的事件处理机制保证基于监听的事件监听器会被优先触发————此处就会涉及到事件传播的概念


最近重新写了一篇博客:http://blog.csdn.net/supluo/article/details/42914759


0 0