据我所知,您可以通过两种方式将onClick
处理程序分配给一个按钮.
使用android:onClick
XML属性(其中您仅将公共方法的名称与signaturevoid name(View v)
一起使用)或使用setOnClickListener
方法(其中您传递实现OnClickListener
接口的对象).后者通常需要一个我个人不喜欢的匿名类(个人喜好),或者定义一个实现OnClickListener
的内部类.
通过使用XML属性,您只需要定义一个方法,而不是一个类
据我所知,您可以通过两种方式将onClick
处理程序分配给一个按钮.
使用android:onClick
XML属性(其中您仅将公共方法的名称与signaturevoid name(View v)
一起使用)或使用setOnClickListener
方法(其中您传递实现OnClickListener
接口的对象).后者通常需要一个我个人不喜欢的匿名类(个人喜好),或者定义一个实现OnClickListener
的内部类.
通过使用XML属性,您只需要定义一个方法,而不是一个类
不,这不可能通过代码实现.当你定义android:onClick="someMethod"
属性时,Android只是为你实现了OnClickListener
.
这两个代码片段是相等的,只是以两种不同的方式实现.
Code Implementation个
Button btn = (Button) findViewById(R.id.mybutton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myFancyMethod(v);
}
});
// some more code
public void myFancyMethod(View v) {
// does something very interesting
}
上面是一个OnClickListener
的代码实现.这就是XML实现.
XML Implementation
<?xml version="1.0" encoding="utf-8"?>
<!-- layout elements -->
<Button android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:onClick="myFancyMethod" />
<!-- even more layout elements -->
在后台,Android只执行Java代码,即在单击事件上调用您的方法.
注意,有了上面的XML,Android将只在当前活动中查找onClick
方法myFancyMethod()
.如果您使用的是片段,记住这一点很重要,因为即使您使用片段添加上面的XML,Android也不会在用于添加XML的片段的.java
文件中查找onClick
方法.
我注意到的另一件重要的事.你说过你不喜欢匿名methods.你的意思是说你不喜欢匿名classes.