View.OnClickListener,方法还是类?

Lew*_*rin 14 java android

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

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

        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

我很困惑.onClick收到一个View对象所以onClickListener不是一个对象返回一个View对象?? 我根本得不到它.

有人可以解释一下这行中发生的事情View.onClickListener()是另一种说法new this吗?

MBy*_*ByD 24

View.OnClickListener是一个接口,你不要调用它,但是创建它的一个新实例(new View.OnClickListener()是对构造函数的调用)

您创建的实例是匿名类implements View.OnClickListener,在括号右下new View.OnClickListener()

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

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

  • 小补充:不要被`View.OnClickListener`中的`.`混淆.它没有对方法调用做任何事情,`OnClickListener`接口只是在类`View`中定义 - 因此你必须通过类访问接口:`View.OnClickListener`.(你也可以`导入android.view.View.OnClickListener`并通过`OnClickListener`访问界面,但我不知道这是否违反了一些andriod编码约定) (14认同)
  • @Elyas Machera - 我们都这样做 (2认同)