单击按钮时,有多种方法可以注册回调。如果我按以下方式进行:
public class MainActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(this, "Hello onCLick", Toast.LENGTH_SHORT).show();
}
}
我不明白方法setOnClickListener(this)如何识别它应该调用onClick()方法?
答案 0 :(得分:2)
这是指活动。因为Activity实现了一个OnClickListener调用button.setOnClickListener(this)给出了Activity实现的onClickListener到setOnClickListener。
如果您想要了解有关此做法的更多信息,我建议您查找有关在Java中实现接口的信息。
答案 1 :(得分:1)
我想我理解你的困惑。当您阅读其他SO答案或View.OnClickListener之类的引用时,感觉就像所有句子都在说同样的事情,但没有什么真正有助于点击。
当点击Button
时,会发生通知所有正在侦听它的对象。您正在使用
button.setOnClickListener(this);
因此,在点击事件中,按钮知道它应该调用活动的onClick
事件。
我不明白方法
setOnClickListener(this)
如何识别 它应该调用onClick()
方法?
(因此,调用listener.onClick()
方法的是按钮,以防有混淆。)
另外,@ nourikhalass有一点,你应该首先确保接口对你有意义。
是否更清楚?
答案 2 :(得分:1)
如果您了解oops'这个'参考当前对象的参考。一个很好的解释是定义here
在上面的例子中,MainActivity引用在此处引用。
public void setOnClickListener(OnClickListener l)
是在类Button中定义的setter方法,它将引用保存在" OnClickListener"。
当您设置setOnClickListener(this)时,它定义您将OnClickListener引用作为您的活动传递,以便在OnClickListener上将您的活动作为类型,您必须在您的活动类中实现接口OnClickListener,因为它在您的代码中显示。
public class MainActivity extends Activity implements OnClickListener
它是一个回调监听器,它有方法" onClick"你必须覆盖该方法 当单击按钮时,该方法被Button类调用,因此事件监听器(您在当前场景中的活动)可以监听它。
答案 3 :(得分:0)
您的代码已
MainActivity implements OnClickListener
但实际上是:
MainActivity implements View.OnClickListener
也许这让你感到困惑。
答案 4 :(得分:0)
"这"是指当前的对象。
要处理按钮点击,对象必须实现" OnClickListener"接口并定义在" onClick"中收到点击时要执行的操作方法。然后,您可以将该对象注册为按钮点击的监听器。
在您的情况下,您的活动实现了OnClickListener,而onClick显示了一个toast:
public class MainActivity extends Activity implements OnClickListener {
...
@Override
public void onClick(View v) {
Toast.makeText(this, "Hello onCLick", Toast.LENGTH_SHORT).show();
}
因此,您的活动可以处理按钮点击,因此您将其注册为按钮的监听器:
button.setOnClickListener(this);
As" this"实现所需的接口,是一个有效的监听器。