setOnclickListener(this)如何工作?

时间:2015-02-06 08:51:27

标签: android this

单击按钮时,有多种方法可以注册回调。如果我按以下方式进行:

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()方法?

5 个答案:

答案 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"实现所需的接口,是一个有效的监听器。