在Android中,我们可以通过事件处理使UI与用户互动(UI Events)。
UI的用户事件处理,即View处理用户的操作,在应用程序中几乎不可避免。View是重要的类,它是与用户互动的前线;在Android框架的设计中,以事件监听器(event listener)的方式來处理UI的用户事件。
Android框架提供了非常良好的UI事件处理机制。View是绘制UI的类,每个View对象都可以向Android框架注册一个事件监听器。每个事件监听器都包含一个回调函数(callback method),这个回调函数(callback method)主要的工作就是回应或处理用户的操作。
Event Listener: Click Listener例子
以「用户触碰(touch)」的动作來說,当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener事件监听器;当「touch」事件发生时,Android框架便回调事件监听器里的回调函數。
View.OnClickListener是click listener,顾名思义,这是UI的「Click动作监听器」;当用户对View进行Click操作时(即触控上的UI组件),Android框架便会回调这个View.OnClickListener的回调函數。
View.OnClickListerner的回调函数为onClick()。
这里所提到的监听器泛指event listener,主要用來「监听」用户的各种动作。除了View.OnClickListener外,Android框架还有以下的event listener(及其callback method):
另外一种UI事件的机制为事件处理器(event handler),event handler与event listener是不一样的处理机制。这个留着以后再研究。
以Android所提供的View.OnClickListener來说明程序实现方法。一个较为良好的实现方法是在Acitivty类里实现View.OnClickListener界面,即:
public class YypClickListenerActivity extends Activity implements View.OnClickListener{ ... }上面的代码用到了面向对象的接口技术,每一个View都可以注册一个event listener,当Android框架收到「click」事件后,便回调event listener的callback method。以Button类为例,当我们想要处理用户触控按钮事件时,就要调用Button类的setOnClickListener()方法来注册click listener。上述的实现方法是,直接在的Activity类YypClickListenerActivity里实现View.OnClickListener,因此上述Button类的click listener为「this」。如下图:
Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(this);在onCreate()里先找到Button组件,它的click listener为this,接着在的Activity类里实现onClick()。onClick()方法的代码如下,我们以Toast类來回应信息給用户:
public void onClick(View v){ Toast.makeText(this,"http://blog.csdn.net/imyang2007?viewmode=contents",Toast.LENGTH_LONG).show(); }完整的代码很简单:
package com.android; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class YypClickListenerActivity extends Activity implements View.OnClickListener{ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(this); } public void onClick(View v){ Toast.makeText(this,"http://blog.csdn.net/imyang2007?viewmode=contents",Toast.LENGTH_LONG).show(); } }