在Android中处理事件的最佳方式

Mt.*_*ers 14 java android event-handling

我知道这似乎是一个重复的问题,但我真的无法找到相关主题的好答案.

关于什么是处理OnClick事件的最佳方式,有很多问题Button.
以下是我遇到的一些选项:

1 - 以编程OnCreate方式定义侦听器:

button.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //do stuff
    }
});
Run Code Online (Sandbox Code Playgroud)

2 - android:OnClick在XML上设置属性:

<Button android:id="@+id/btnDelete"
    ...
    android:OnClick="btnDelete_OnClick"/>
Run Code Online (Sandbox Code Playgroud)

3 - OnClickListenerActivity类上实现接口并将自引用传递给Button:

public class MainActivity extends Activity implements OnClickListener{
    @Override
    public void onClick(View v) {
        //do stuff
    }

    protected void onCreate(Bundle savedInstanceState) {
        ...
        button.setOnClickListener(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

4 - 创建一个OnClickListener类型为的字段:

private OnClickListener onClickHandler = new OnClickListener(){

    @Override
    public void onClick(View v) {
        //stuff
    }
};

protected void onCreate(Bundle savedInstanceState) {
    ...
    button.setOnClickListener(onClickHandler);
}
Run Code Online (Sandbox Code Playgroud)

说到a ButtonOnClick事件,我总是喜欢在XML上定义它,它更干净.

但是其他事件如OnItemClick来自ListViewOnTimeSet来自TimePickerDialog?我没有看到在XML上设置它的属性.我认为实现Listener接口是一个非常干净的解决方案,但这意味着我只能实现一次,如果我有两个相同的视图,我将不得不在同一个地方处理它们的事件.如果我使用选项2或4,当从UI处理来自不同视图的多个事件时,它可能会变得非常混乱.

如果事件处理有任何其他实施选项,我想看到关于这个主题的其他意见.真的有一种替代方案可以被定义为更好的方案,还是只是每个程序员的个人事务?

shr*_*ari 0

处理 Button 的 OnClick 事件的最佳方法取决于以下几点:

1. 您拥有的按钮数量。

答:如果您只有一个按钮,您可以使用第一种方法创建匿名类。但如果你有多个按钮,那么创建多个匿名 onClicklistener 就不好了。但要选择其他选择

2.内存优化

Ans:如果您在 Activity 类上实现 OnClickListener 接口并向 Button 传递自引用,则 onclick 侦听器将保留对该活动对象的引用,因此将整个活动的对象保留在其中会很繁重,因此在此具有 OnClickListener 类型的局部变量的方式是更优化的方式。

因此,总的来说,最佳实践是创建一个具有 OnClickListener 类型的局部变量,这是处理任何类型事件的最佳方法,而不仅仅是 Button 上的 onClick 事件。