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

时间:2012-08-05 08:47:31

标签: java android eclipse

View.OnClickListener()是函数还是接口?当我们尝试在android中设置一个onclicklistener()方法时,我们使用新的View.OnClickListener()并且据我所知它在那里烦扰我,

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

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

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

感谢您的回复..

2 个答案:

答案 0 :(得分: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           
    }
});

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

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

后来使用这个

MyOnClickListener listener = new MyOnClickListener();
myView.setOnClickListener(listener);

答案 1 :(得分:2)

enter image description here

示例代码,

在内部,它可以像这样工作,

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) {

            }
        });
    }
}