我是Java / Android编程的新手,不幸的是,我并没有完全理解这段代码背后的逻辑:
set /p "var=[y/n]?" || goto :noUserInput
我已经阅读了很多有关它的教程,但不幸的是到目前为止,没有人详细解释过代码。也许是因为它是如此基本,以至于每个体面的面向对象的程序员都会立即理解结构的原因。
我想知道为什么我需要使用 button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
作为参数?对于new View.OnClickListener()
方法。换句话说,为什么不像
setOnClickListener
这项工作?
除此之外,我不太清楚为什么 button.setOnClickListener(
public void onClick(View v) {
// Perform action on click
});
方法需要onClick
的参数。
我会非常感谢一些帮助,因为我目前很困惑。
答案 0 :(得分:3)
View.OnClickListener
是您希望处理点击事件时需要实现的界面。在您的代码中,您通过执行new View.OnClickListener()
来执行此操作。在这里,您实际上是在创建一个实现View.OnClickListener
的匿名类。任何实现View.OnClickListener
的类也必须实现其中声明的所有方法(例如onClick
方法)。另外,在public void onClick(View v) {..}
中,
View v
表示视图或单击的按钮,以便您可以使用它执行任何操作。例如,获取它的ID,更改它的颜色等。
答案 1 :(得分:1)
好的,首先onClick方法需要一个参数作为函数。事情是在Java中,您不能像在其他语言(如C ++)中那样将函数作为参数发送。 Java解决方案是使用功能接口。
在这种情况下,OnClickListener是一个必须实现一个方法的接口:public void onClick(View v)。查看v它是您刚刚单击的视图,因此调用它的方法。
button.setOnClickListener(OnClickListener)表示set ...函数需要一个实现OnClickListener的参数。
这就是代码的作用:
new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
它正在创建一个实现所需OnClickListener接口的匿名类。
答案 2 :(得分:1)
想象一下它就像你定义的那样 - 你没有传递一个参数,只是描述按下那个按钮时要采取的动作。它将完美地工作,但仅适用于该按钮。您必须为每个其他按钮重做此方法。在有相当多的按钮做同样的事情的情况下是什么?你每次都会重新定义它。简单地做一次然后传递它会更容易吗?简单地只有一个onClick()方法可以更容易地识别被点击的元素的id,然后只为具有该id的小部件执行逻辑而不是使用繁琐的单独代码行?
也不要忘记传递的参数属于View类,它是每个其他小部件的超类。因此,如果需要,可以将为其他小部件定义的onClickListener()方法传递给此方法(尽管这种情况实际上很少见)。
要回答您的问题,Android团队本可以按照您描述的方式设计它,但是由于最佳做法和编程范式,我们选择这样做。