8

View.OnClickListener() 是函数还是接口?当我们尝试在 android 中设置 onclicklistener() 方法时,我们使用 new View.OnClickListener() 并且据我所知,它让我感到困扰,

  • 我们不需要初始化包含静态方法的类的对象来使用这些方法。我们为什么这样做?
  • 当我们使用 implements 来实现一个接口时,我们不会调用接口的静态方法。

所以有人可以告诉我为什么我们这样做:

  • 新的 View.OnClickListener(),用于使用 onclick() 方法?
  • View.OnClickListener 如果是接口,为什么要使用 () 呢?

感谢您的回复..

4

2 回答 2

19

我不确定我是否理解您所写的有关静态方法的内容。View.OnClickListener 是一个接口:http: //developer.android.com/reference/android/view/View.OnClickListener.html

要在视图上设置点击监听器,您需要传递一个实现 OnClickListerner 接口的实例:http: //developer.android.com/reference/android/view/View.html#setOnClickListener(android.view.View.OnClickListener)

在 android 中执行此操作的最常见方法是定义一个匿名内部类 ( http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html ),该类实现 OnClickListener 之类的

myView.setOnClickListener(new View.OnClickListener() {
    @Override           
    public void onClick(View v) {
        // Handle view click here           
    }
});

上面的代码都定义了一个匿名内部类并创建了它的一个实例。相当于先定义一个实现View.OnClickListener的类(如果定义在同一个类中)

class MyOnClickListener implements View.OnClickListener {
    @Override           
    public void onClick(View v) {
        // Handle view click here           
    }
}

后来用这个

MyOnClickListener listener = new MyOnClickListener();
myView.setOnClickListener(listener);
于 2012-08-05T09:01:34.367 回答
2

在此处输入图像描述

示例代码,

在内部它的工作原理是这样的,

public class MyView{

public stinterface MyInterface{
        public void myOnClick(View view);
    }

}

 public class MyButton{
        View view;

        public void setOnClicker(MyInterface onClicker) {
            onClicker.myOnClick(view);
        }
    }


public class MyExample{

    public void method(){
        MyButton myButton = new MyButton();
        myButton.setOnClicker(new MyInterface() {
            @Override
            public void myOnClick(View view) {

            }
        });
    }
}
于 2017-09-08T10:34:52.023 回答