View.OnClickListener()是函数还是接口?当我们尝试在android中设置一个onclicklistener()方法时,我们使用新的View.OnClickListener()并且据我所知它在那里烦扰我,
有人可以告诉我为什么要这样做:
感谢您的回复..
答案 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)
示例代码,
在内部,它可以像这样工作,
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) {
}
});
}
}