在安卓系统中处理事件的最佳方式 [已关闭]

2022-09-04 04:35:24

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

关于处理 .
以下是我遇到的一些选项:OnClickButton

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

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

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

<Button android:id="@+id/btnDelete"
    ...
    android:OnClick="btnDelete_OnClick"/>

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

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

    protected void onCreate(Bundle savedInstanceState) {
        ...
        button.setOnClickListener(this);
    }
}

4 - 创建类型为以下内容的字段:OnClickListener

private OnClickListener onClickHandler = new OnClickListener(){

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

protected void onCreate(Bundle savedInstanceState) {
    ...
    button.setOnClickListener(onClickHandler);
}

当涉及到 a 和事件时,我总是更喜欢在 XML 上定义它,它只是更干净。ButtonOnClick

但是其他事件呢,例如来自或来自?我看不到用于在 XML 上设置它的属性。我认为实现监听器接口是一个非常干净的解决方案,但这意味着我只能实现一次,如果我有两个相等的视图,我必须在同一位置处理它们的事件。如果我使用选项 2 或 4,则在处理来自 UI 中不同视图的多个事件时,它可能会变得非常混乱。OnItemClickListViewOnTimeSetTimePickerDialog

如果事件处理有任何其他实现选项,我希望看到有关此主题的其他意见。是否真的有一种替代方案可以被定义为更好的替代方案,或者它只是每个程序员的个人问题?


答案 1

让我试着逐案解释:

案例# 1这种方式将创建匿名锁扣,就像您创建按钮一样多(每个按钮都需要新的侦听器),并且其可读性和成本较低。

案例# 2实际上,如果您阅读此背后的代码,您会发现它使用反射来查找回调的侦听器(方法),并且它的可读性较差,并使其他开发人员感到困惑。

案例# 3这种方式很难浏览,因为您无法确定使用当前按钮使用的侦听器的类型(我知道eclipse会突出显示指向的方法,但是对于巨大的代码,我认为很难找到)。this

案例# 4我认为这是实现监听器的最佳方式,易于导航到,更具可读性,一个监听器可以处理所有相关事件(并且使用eclipse,只需您可以转到监听器),所以我推荐这个(在工作中只使用这种方式)ctrl+click

我希望这会有所帮助


答案 2
  1. 如果我在课堂上只有一两个听众,我喜欢这种方法。例如列表视图的 .使用多个视图,它确实变得非常混乱。onItemClickListener

  2. 我根本不使用,只是因为我喜欢将代码保存在代码中。android:onClick

  3. 当我有几个视图要处理时,我喜欢这个。但是,我仍然喜欢保持代码稀疏。它通常最终是按 id,具有一组类似的视图调用其他方法来处理,如或类似。这样,我所有主要的“处理”调用都在一个地方完成。onClick()switchhandleDownVote()

  4. 我不知道人们这样做。我认为它比#3更能对喜欢的观点进行分组,但我从来没有真正考虑过它。也许我会给它一些时间。

然而,当一切都归结为它时,这是一个高度主观的问题,因为没有一种真正“正确”或“优化”的方法可以做到这一点。如您所见,到目前为止,每个答案都是不同的。没有冒犯,但投票关闭。


推荐