View.OnClickListener, method or class?

2022-09-03 18:21:05

抱歉,如果这个问题是愚蠢的,但我不能把我的头缠绕在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对象有一个成员对象,我从它的名字我假设初始化一个事件到按钮或其他东西。但它接收对象。setOnClickListenerView.OnClicListener()

我对此感到困惑。onClick 接收一个 View 对象,所以一个对象不是返回一个 View 对象吗?我完全不明白。onClickListener

有人能解释一下这句话中发生了什么,这是另一种说法吗?View.onClickListener()new this


答案 1

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

您创建的实例是匿名类,该类位于implementsView.OnClickListenernew View.OnClickListener()

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

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


答案 2

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

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

-伍迪


推荐