有四种方法可以将 onClickListener 添加到可点击的 View (例如按钮):
- 在布局文件中设置onClick属性,指向activity中的一个方法,
- 创建一个匿名内部类,
- 将 onClickListener 分配给私有(private)成员变量。
- 让 Activity 上下文实现 onClickListener 接口(interface)。
所以我的问题是,您如何选择这些实现技术中的一种而不是另一种?是否有根据特定条件的最佳实践,或者这只是程序员偏好的问题?
最佳答案
这里我们使用所谓的回调模式。
public class Button {
private Callback callback;
public Button(Callback callback) {
this.callback = callback;
}
public void update() {
// Check if clicked..
callback.onClick(this);
}
public interface Callback {
public void onClick(Button Button);
}
}
Button b = new Button(new Callback() {
@Override
public void onClick(Button b) {
System.out.println("Clicked");
}
});
在我们的例子中,onClick 处理程序实现了接口(interface) View.OnClickListener。
要点:
- 与 Activity/fragment 的一致性;
- 访问 Activity/fragment 的成员;
- 可读性;
- @Michael Krause 展示了关于 memory leaks 的另一个优点;
1) XML 文件中的属性只能用于 Activity,正如 @Karakuri 提到的,它使用的是反射,速度很慢。
2) 匿名内部类对访问封闭类的成员有特殊的规则(检查 [1] , [2] )。在某些情况下可能会发生内存泄漏(例如使用 AsyncTask、处理程序的线程)。
3) 在这里您可以完全访问封闭类的成员。
4) 是 3d 的变体。
可读性取决于您的处理程序大小,小逻辑可以内联,但对于较大的代码块,请考虑 3d 和 4th。
关于java - Android onClickListener 实现最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37014156/