background image

实现。

)

下面的例子说明了如何为一个按钮注册一个点击侦听器:

1

//  Create  an  anonymous  implementation  of  OnClickListener   private  OnClickListener 

mCorkyListener = new OnClickListener() {  

2

public void onClick(View v) {  // do something when the button is clicked  

3

}  };  

4

protected void onCreate(Bundle savedValues) {  ...  

5

// Capture our button from layout  Button button = (Button)findViewById(R.id.corky);  

6

// 

Register 

the 

onClick 

listener 

with 

the 

implementation 

above 

button.setOnClickListener(mCorkyListener);  

7

...  } 

你可能会发现把

OnClickListener 作为活动的一部分来实现会便利的多。这将避免额外

的类加载和对象分配。比如:

8

public class ExampleActivity extends Activity implements OnClickListener {   protected 

void onCreate(Bundle savedValues) {  

9

...  Button button = (Button)findViewById(R.id.corky);  

10

button.setOnClickListener(this);  }  

11

// Implement the OnClickListener callback  public void onClick(View v) {  

12

// do something when the button is clicked  }  

13

...  } 

注意上面例子中的

onClick()回调没有返回值,但是一些其它 Android 事件侦听器必须

返回一个布尔值。原因和事件相关。对于其中一些,原因如下:

· onLongClick() – 返回一个布尔值来指示你是否已经消费了这个事件而不应该再进一步

处理它。也就是说,返回

true 表示你已经处理了这个事件而且到此为止;返回 false 表示你

还没有处理它和

/或这个事件应该继续交给其他 on-click 侦听器。

· onKey() –返回一个布尔值来指示你是否已经消费了这个事件而不应该再进一步处理

它。也就是说,返回

true 表示你已经处理了这个事件而且到此为止;返回 false 表示你还没

有处理它和

/或这个事件应该继续交给其他 on-key 侦听器。

· onTouch() - 返回一个布尔值来指示你的侦听器是否已经消费了这个事件。重要的是这

个事件可以有多个彼此跟随的动作。因此,如果当接收到向下动作事件时你返回

false,那

表明你还没有消费这个事件而且对后续动作也不感兴趣。那么,你将不会被该事件中的其他
动作调用,比如手势或最后出现向上动作事件。

记住按键事件总是递交给当前焦点所在的视图。它们从视图层次的顶层开始被分发,然

后依次向下,直到到达恰当的目标。如果你的视图(或者一个子视图)当前拥有焦点,那么
你可以看到事件经由

dispatchKeyEvent()方法分发。除了从你的视图截获按键事件,还有一