Android-逻辑背后的setOnClickListener

时间:2015-06-14 09:09:29

标签: java android onclicklistener

我是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的参数。

我会非常感谢一些帮助,因为我目前很困惑。

3 个答案:

答案 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团队本可以按照您描述的方式设计它,但是由于最佳做法和编程范式,我们选择这样做。