gpt4 book ai didi

java - Android onClickListener 实现最佳实践

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:49 24 4
gpt4 key购买 nike

有四种方法可以将 onClickListener 添加到可点击的 View (例如按钮):

  1. 在布局文件中设置onClick属性,指向activity中的一个方法,
  2. 创建一个匿名内部类,
  3. 将 onClickListener 分配给私有(private)成员变量。
  4. 让 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com