View.OnClickListener()一个函数或接口

Alf*_*mes 7 java eclipse android

View.OnClickListener()是函数还是接口?当我们尝试在android中设置一个onclicklistener()方法时,我们使用新的View.OnClickListener(),据我所知,它会让我感到烦恼,因为

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

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

  • 新的View.OnClickListener(),用于使用onclick()方法?
  • 如果它是一个接口,为什么我们使用View.OnClickListener?

感谢您的回复..

tou*_*can 14

我不确定我理解你在写静态方法的内容.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中执行此操作的最常见方法是定义一个实现OnClickListener 的匿名内部类(http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html)

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

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

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

后来用这个

MyOnClickListener listener = new MyOnClickListener();
myView.setOnClickListener(listener);
Run Code Online (Sandbox Code Playgroud)

  • ()是对匿名内部类的构造函数的调用,即创建实现OnClickListener的对象的位置.谷歌为"匿名内部类"或看看这里http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java或在这里http://viralpatel.net/blogs /内类合的java / (4认同)