了解与模型 - 视图 - 控制器概念相关的setOnClickListener,View.OnClickListener(),onClick(View v)

时间:2011-06-14 22:47:45

标签: android events

我很清楚如何将我的xml按钮的id转换为Button,最终转换为sayIt字段,但是......

Button sayIt = (Button) findViewById(R.id.sayit);

... setOnClickListener是否与Controller“注册”,以便在单击按钮时收到通知?如果是这样,那么是View.OnClickListener()及其onClick(View v)方法,其中Controller首先告诉我的代码,嘿,我已经被点击了,这就是食物链的起源?

sayIt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

    // Does something cool

}
});

1 个答案:

答案 0 :(得分:2)

对于大多数用例,是的,View.OnClickListener#onClick()是标准的“当点击这个东西时做某事”成语。我说得最多,因为实际的底层实现比这更复杂,并且触摸事件在被视为“点击”事件之前沿着视图层次结构向上传播,并且在层次结构中向下传播为点击事件 - 但除非您实施自定义视图,并且需要进行基于触摸的自定义跟踪,否则通常无需担心这些事件。

例如,如果在视图上设置View.OnTouchListener,则会获得每个触摸事件(向下,向上,向上和受支持的设备,甚至是多个指针)。在onTouchEvent()处理程序中,如果你return true,它会告诉视图“我对这个动作事件感兴趣,并且我已经消耗了这个事件;因此假装事件从未发生过并停止传播/处理它” - - 通过这样做,您实际上会干扰标准的OnClickListener点击事件检测。

但在大多数情况下,如果你因为点击按钮而想要发生一些事情(惊喜,惊喜:),View.OnClickListenerView#setOnClickListener()就是你想要的。