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
对象
按下按钮。
请回复
答案 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));
请注意,现在您必须将所需的内容传递到对象中。与counter
和display
变量类似。
希望这有帮助
侦听器事物基本上是pattern called observer,可用于将多个处理程序与按钮本身的按钮分离。这样他们就不会直接相互了解,这样就可以通过使用继承来独立发展。
匿名类是快速创建子类的一种方法。有关匿名类的更多信息,请查看this site