Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java View.OnClickListener、方法还是类?_Java_Android - Fatal编程技术网

Java View.OnClickListener、方法还是类?

Java View.OnClickListener、方法还是类?,java,android,Java,Android,如果这个问题很愚蠢,我很抱歉,但我无法理解Java语法。我学过C/C++ 我知道View是一个很好的类。但我不明白View.OnClickListener()是否是一个方法。 我怀疑它,除非它返回一个对象 我认为View是一个具有静态OnClickListener成员对象的类。这对我来说同样没有意义。 有人能解释一下这行代码是怎么回事吗 button1 = (Button) findByView(R.id.button1) ; button1.setOnClickListener(ne

如果这个问题很愚蠢,我很抱歉,但我无法理解Java语法。我学过C/C++
我知道View是一个很好的类。但我不明白View.OnClickListener()是否是一个方法。
我怀疑它,除非它返回一个对象
我认为View是一个具有静态OnClickListener成员对象的类。这对我来说同样没有意义。
有人能解释一下这行代码是怎么回事吗

button1 = (Button) findByView(R.id.button1)  ;
    button1.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {

        }
    }
那么这段代码发生了什么

Button1
是对xml文件中Button1对象的引用

button1
对象有一个成员对象
setOnClickListener
,我从它的名字开始假设它初始化了一个事件到按钮或其他东西。但它接收
View.OnClicListener()
对象

我对此感到困惑..onClick接收一个视图对象,所以
onClickListener
不是一个返回视图对象的对象吗??我一点也不明白

有人能解释一下在那行视图中发生了什么吗?onClickListener()这是另一种说法吗?

,你不调用它,而是创建它的一个新实例(
new View.onClickListener()
是对构造函数的调用)

您创建的实例是
实现的
视图。OnClickListener
,位于
新视图下的右括号中。OnClickListener()

实现
View.OnClickListener
的任何类都必须实现其中声明的方法(例如)


setOnClickListener
只保存对您提供的View.OnClickListener实例的引用,当有人单击该按钮时,将调用您设置的侦听器的
onClick
方法。

OnClickListener是一个接口。接口提供了一组其他类可以实现的方法

您可以有另一个类(比如and adapter),它扩展了OnClickListener,然后您的适配器类可以添加方法“OnClick(View v)”,它还可以处理单击事件。或者您可以使用发布的代码,只需创建一个实现OnClickListener的匿名类


-Woody

Android代码适合基于事件的响应。代码块如下所示:

查找已添加到活动布局的按钮,并将其指定给局部变量:

button1 = (Button) findByView(R.id.button1);
设置按钮的单击侦听器。这个类将在按钮注册事件时调用。该类是在这里构造的,它是匿名的,因为您没有将其分配给变量,但android将跟踪引用

按钮事件总是由于被按下而导致的,因此当按钮注册它已被按下时,它将通知onClickListener类该事件已发生,并将自身作为视图传入。onClickListener构造为:

new View.OnClickListener() 
{
    public void onClick(View v)
    {

    } 
}
侦听器使用onClick方法来处理事件(在本例中,是按下按钮)。因此,您可以将希望执行的代码放在该方法中


为了直接回答您的问题,onclicklister是一个匿名类,它定义了onClick方法,该方法将处理按钮事件。

谢谢,我阅读了链接。因此,接口就像一个单独的类,它包含一系列可以由扩展它的其他类实现的函数。因此视图类扩展了OnClickListener接口,或者它是接口中的一个方法。视图有一个局部变量,该变量需要一个实现“OnClickListener”接口的类。当您调用View.set。。。方法,它用您提供的任何内容填充该变量,可以是实现“OnClickListener”的类,也可以是匿名类(这是您在原始帖子中看到的),然后,每当视图处理单击时,它都可以调用您提供的类中的OnClick函数。不要忘记将某人的回答标记为您问题的答案(单击旁边的绿色复选框)小补充:不要被
视图中的
所迷惑。OnClickListener
。它与方法调用没有任何关系,
OnClickListener
接口只是在类
View
中定义的-因此您必须通过类访问接口:
View.OnClickListener
。(您也可以
导入android.view.view.OnClickListener
并通过
OnClickListener
访问接口,但我不知道这是否违反了一些andriod编码约定)@MByD,正如我们所知,这个关键字将指向当前类,比如说-class A扩展了活动实现了view.Onclicklistner{//对于任何视图。setOnclickListner(this);//因此在本例中,这将指向ActivityClass,它将如何使用listner?}