我是Java和Android开发的新手。我找到了一个使用以下语句的示例。

sButton.setOnClickListener(this);


在实现View.OnClickListener的Activity的onCreate()方法中,其中sButton是一个Button变量。据我了解,此注册点击事件处理程序
稍后在样本中

 public void onClick(View v) {
    if(v.getId() == R.id.button_s)
    {
    //some work
    }


有时候是这样的。
我的问题是,如果它从活动内部使用'this'关键字,是否不应该传递Activity类的对象?如果发生这种情况,则按钮ID将永远不匹配。

我知道还有其他方法可以实现Button单击。

我对C#和Windows Phone有一些经验。那里的过程是针对各个按钮调用了这些方法,而无需注册它们。

另外,事件处理程序和侦听器之间有什么区别?

任何帮助,将不胜感激!谢谢

最佳答案

OnClickListener(在本例中为Activity实例)用于声明应用程序使用click事件时的行为。但是,应用程序的主(UI)线程会注册所有(UI)事件,它将把适当的View对象作为参数分派给onClick(View v)函数。

您提供的代码片段-sButton.setOnClickListener(this)只是指示您的应用程序在Activity实现中使用已实现的OnClickListener来响应用户的点击。它不会将this实例作为参数转发给onClick()函数,Android OS会这样做。

结论:View v函数中的onClick(View v)参数将对应于用户单击的View,而不管该OnClickListener所附加的View

编辑:This是(也许已过时,但是)Android的performClick()类的View方法的源代码。如您所见,在该方法内部,如果连接了侦听器,它将调用mOnClickListener.onClick(this),这就是将单击的视图转发到适当的onClick()对象的onClickListener方法的方式。

10-08 07:38
查看更多