对于名为add的按钮对象的方法,下面给出的参数是什么意思

时间:2014-06-17 11:42:09

标签: android-activity

add.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        counter +=19;
        display.setText("your total is "+ counter);
    }
});

我正在学习android编程,但这段代码意味着什么 添加是Button对象,我们正在使用方法setOnClickListener,基本上是什么 作为一个参数传递给它,这是令人困惑的。 counter是int变量,显示的是用于生成文本的TextView对象 按下按钮。 请回复

1 个答案:

答案 0 :(得分:1)

该参数是一个匿名类型子类的新匿名对象,它被View.OnClickListener 添加到名为add的按钮中。该定义引用了此代码new View.OnClickListener() { /*...*/ }给出的参数。

这就是您的行中发生的事情。每当按下按钮add时,将在传入的匿名对象上调用方法onClick。然后执行覆盖onClick方法内的代码。

通过将匿名类分成如下所示的命名类,可以使其更清晰:

class MyButtonListener implements View.OnClickListener {
    private int counter;
    private TextView display;
    public MyButtonListener(int counter, TextView display) {
        this.counter = counter;
        this.display = display;
    }
    @Override
    public void onClick(View v) {
        counter +=19;
        display.setText("your total is "+ counter);
    }
}

仍然使用匿名创建的对象,因为它没有绑定到命名变量并将其直接再次传递给您的add按钮。但现在您使用名为MyButtonListener

的命名类
add.setOnClickListener(new MyButtonListener(counter, display));

请注意,现在您必须将所需的内容传递到对象中。与counterdisplay变量类似。

希望这有帮助

侦听器事物基本上是pattern called observer,可用于将多个处理程序与按钮本身的按钮分离。这样他们就不会直接相互了解,这样就可以通过使用继承来独立发展。

匿名类是快速创建子类的一种方法。有关匿名类的更多信息,请查看this site