View.OnClickListener,方法还是类?

时间:2011-08-04 18:52:06

标签: 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)
        {

        }
    }

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

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

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

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

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

3 个答案:

答案 0 :(得分:23)

View.OnClickListener is an interface,你没有调用它,但是创建了一个新实例(new View.OnClickListener()是对构造函数的调用)

您创建的实例是anonymous class implements View.OnClickListener,位于new View.OnClickListener()

下方的括号中

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

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

答案 1 :(得分:2)

OnClickListener是一个接口。接口提供了一组其他类可以实现的方法。 http://download.oracle.com/javase/tutorial/java/concepts/interface.html

你可以有另一个类(Like和adapter),它扩展了OnClickListener,然后你的Adapter类可以添加方法“OnClick(View v)”,它也可以处理Click事件。或者您可以使用您发布的代码,您只需创建一个实现OnClickListener的匿名类。

-Woody

答案 2 :(得分:2)

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

找到已添加到活动布局的按钮,并将其分配给本地变量:

button1 = (Button) findByView(R.id.button1);

设置按钮的on click侦听器。这是一个在按钮注册事件时将调用的类。这个类是在这里构造的,它是匿名的,因为你没有将它分配给变量,但android会跟踪引用。

按钮事件总是由于被按下,因此当按钮注册它已被按下时,它将通知onClickListener类,偶数发生,并作为视图传递给自己。 onClickListener构造为:

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

    } 
}

侦听器使用onClick方法来处理事件(在这种情况下,按下按钮)。所以,你会把你想要执行的代码放在那个方法中。

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