我是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
方法的方式。