我知道这似乎是一个重复的问题,但我真的找不到一个关于相关主题的好答案。
关于如何处理Button
的OnClick
事件有很多问题。
以下是我遇到的一些选项:
1-在OnCreate
方法中以编程方式定义监听器:
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//do stuff
}
});
2 - 在XML中设置android:OnClick
属性:
<Button android:id="@+id/btnDelete"
...
android:OnClick="btnDelete_OnClick"/>
3 - 在Activity
类上实现OnClickListener
接口,并将自引用传递给按钮:
public class MainActivity extends Activity implements OnClickListener{
@Override
public void onClick(View v) {
//do stuff
}
protected void onCreate(Bundle savedInstanceState) {
...
button.setOnClickListener(this);
}
}
4 - 创建一个类型为OnClickListener
的字段:
private OnClickListener onClickHandler = new OnClickListener(){
@Override
public void onClick(View v) {
//stuff
}
};
protected void onCreate(Bundle savedInstanceState) {
...
button.setOnClickListener(onClickHandler);
}
当涉及到
Button
和OnClick
事件时,我总是更喜欢在XML中定义它,这样更加清晰。但是其他事件如来自ListView
的OnItemClick
或者TimePickerDialog
的OnTimeSet
呢?我没有看到可以在XML上设置的属性。我认为实现Listener接口是一个相当干净的解决方案,但这意味着我只能实现一次,如果我有两个相同的视图,则必须在同一个地方处理它们的事件。如果我使用选项2或4,则可能在处理来自UI不同视图的多个事件时会变得非常混乱。我想看到其他人对此问题的看法,是否有其他事件处理实现的选择?是否真的存在可以定义为更好的替代方案,还是每个程序员都有个人偏好?