我是Java和Android开发的新手。我找到了一个使用以下语句的示例。
sButton.setOnClickListener(this);
在Activity的onCreate()方法中,该方法实现了View.OnClickListener,其中sButton是一个Button变量。据我所知,这会注册on click事件处理程序 稍后的样本
public void onClick(View v) {
if(v.getId() == R.id.button_s)
{
//some work
}
发生了这种情况。
我的问题是它是否使用了这个'活动内部的关键字不应该传递类Activity的对象吗?如果发生这种情况,那么按钮ID永远不会匹配。
我知道还有其他方法可以实现Button click。
我对C#和Windows Phone有一点经验。这个过程是为各个按钮调用方法而不需要注册它们。
事件处理程序和监听器之间有什么区别?
任何帮助将不胜感激!感谢
答案 0 :(得分:2)
OnClickListener
(在本例中为Activity实例)用于在消耗click事件时声明应用程序的行为。但是,应用程序的Main(UI)线程会注册所有(UI)事件,并将相应的View
对象作为参数分发给onClick(View v)
函数。
您提供的代码段 - sButton.setOnClickListener(this)
只是指示您的应用程序使用您的“活动”实施中的已实施OnClickListener
来响应用户点击。它不会将this
实例作为参数转发给onClick()
函数,Android操作系统会这样做。
总之:View v
函数中的onClick(View v)
参数将与用户点击的View
对应,而不管OnClickListener
附加到View
performClick()
{1}}
编辑:This(可能是过时的)Android的View
类mOnClickListener.onClick(this)
方法的源代码。正如您所看到的,在该方法内部,如果附加了侦听器,则会调用onClick()
,这就是将已单击的视图转发到相应onClickListener
对象的{{1}}方法的方式
答案 1 :(得分:1)
一个在
之下Button btn_stop=(Button) findViewById(R.id.btn_stop);
btn_stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
}
});
其次是通过XML android:onClick =" doClick"
下面是活动代码
public void doClick(View v)
{
}
答案 2 :(得分:1)
当你这样做时
sButton.setOnClickListener(this);
this
确实是Activity
的一个实例。但它被宣布为
MyActivity extends Activity implements View.OnClickListener
重要的是它实现了setOnClickListener
作为参数的接口。这就是为什么它有效,this
被视为OnClickListener
,无论是否为Activity
。
至于事件处理程序和侦听器之间的区别,请参阅this question。