Android onClickListener实现最佳实践

Jae*_*aeW 6 java android event-handling

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

  1. 在布局文件中设置onClick属性,该属性指向活动中的方法,
  2. 创建一个匿名内部类,
  3. 将onClickListener分配给私有成员变量.
  4. 让Activity上下文实现onClickListener接口.

所以我的问题是,你如何选择其中一种实现技术呢?根据某些条件是否有最佳实践,还是仅仅是程序员偏好的问题?

Max*_*m G 4

这里我们使用所谓的回调模式。

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");
    }
});
Run Code Online (Sandbox Code Playgroud)

在我们的例子中,onClick 处理程序实现了 View.OnClickListener 接口。

关键点:

  • 与活动/片段的一致性;
  • 访问活动/片段的成员;
  • 可读性;
  • @Michael Krause展示了关于内存泄漏的另一个优点;

1)XML文件中的属性只能用于活动,正如@Karakuri提到的,​​它使用反射,速度很慢。

2) 匿名内部类对于访问封闭类的成员有特殊的规则(检查[1][2])。在某些情况下可能会发生内存泄漏(例如,使用 AsyncTask、Handler 进行线程处理)。

3) 在这里您可以完全访问封闭类的成员。

4) 是 3d 的变体。

可读性取决于处理程序的大小,小的逻辑可以内联,但对于较大的代码块,请考虑 3d 和 4th。