如何处理Android中的按钮点击?

6
在Android中,处理按钮点击似乎有三种常见方法,这些方法之间有多大的差异?哪个方法在某些方面更好呢?
我经常看到的三种方法是:
匿名类
通过ID查找按钮,然后将一个新的匿名类传递给setOnClickListener,在onCreate中实现。
findViewById(R.id.myButton).setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // .. Whatever
    }
});

实现OnClickListener

实现OnClickListener并将this传递给setOnClickListener,然后根据按钮ID使用switch语句,例如在onCreate中。

findViewById(R.id.myButton).setOnClickListener(this);

并实现像 onClick 这样的功能

public void onClick(View v) {
    switch(v.getId()) {
        case R.id.myButton:
            // ... whatever ...
            break;
    }
}

使用 onClick XML 属性

在您的活动 XML 布局中,不要给您的按钮一个 ID,而是像下面这样使用 onClick

<Button 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:onClick="buttonClicked" 
    android:text="Button" />

然后在您的Activity中添加一个名为buttonClicked的方法,如下所示:

public void buttonClicked(View v) {
    // ... whatever ...
}

目前我倾向于使用XML属性,但这只是因为它涉及的代码最少。什么情况下应该使用其他方法?


+1 是用于描述第三种方法的。我正在学习Android,之前不知道 onClick 属性。 - Mike
2个回答

4
第一种和第二种方法都是经典方法。你更喜欢哪一个更多是一个普通Java问题,而不是Android问题。第三种方法是后来添加的,目的是使事情更容易。
在按钮上设置点击监听器是非常常见的任务,但它需要相当多的样板代码。减少样板代码的一种方法是在多个按钮之间共享单个点击监听器。虽然这种技术减少了类的数量,但仍需要相当数量的代码,并且仍需要在XML布局文件中为每个按钮指定ID。在Android 1.6中,这些都是不必要的。你所要做的就是在Activity中声明一个公共方法来处理点击(该方法必须有一个View参数) 来源

1

我一直认为这是个人偏好问题。除了最后两种方法不会在运行时创建对象,我不确定它们是否有任何性能优势。

第一种选项将代码隔离到单个按钮中,因此非常容易调试,因为您知道仅当单击该按钮时才会执行该代码。但是,许多按钮可能会导致初始化方法扩展到较大的大小。

最后两种方法将所有按钮处理放在一个地方,这有时可能很方便和清洁,但是对于许多按钮,您必须通过v.getId()方法解密用户点击的哪个按钮。

最后一种选项允许您轻松指定特定按钮的特定方法,以便您可以像那样将它们分开,但是再次使用许多方法用于单个目的。

我一直在使用内联方法(匿名类)来自定义具有按钮的对话框窗口,因为它将代码与对话框的其余部分保持在一起,而不是在活动或类中。我只需在覆盖onCreateDialog时初始化自定义对话框的按钮即可。

如果按钮位于主窗口上,则在Activity上实现OnClickListener。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接