当前位置: 首页 > 面试题库 >

Android:如何处理按钮单击

花博厚
2023-03-14
问题内容

我在非Java和非Android领域拥有扎实的经验,正在学习Android。

我对不同领域有很多困惑,其中之一就是如何处理按钮单击。至少有4种方式(!!!),此处简要列出

为了保持一致性,我将列出它们:

  1. View.OnClickListener在活动中具有该类的成员,并将其分配给将处理活动方法中的onClick逻辑的实例onCreate

  2. 在“ onCreate”活动方法中创建“ onClickListener”,然后使用setOnClickListener将其分配给按钮

  3. 在活动本身中实现“ onClickListener”,并将“ this”分配为按钮的侦听器。对于活动很少的按钮的情况,应分析按钮ID以对适当的按钮执行“ onClick”处理程序

  4. 在实现“ onClick”逻辑的活动上具有公共方法,并将其分配给活动xml声明中的按钮

问题1:

这些都是方法吗,还有其他选择吗?(我不需要其他,只是好奇)

对我来说,最直观的方式就是最新的方式:它要求键入的代码量最少,并且可读性最高(至少对我而言)。

不过,我看不到这种方法被广泛使用。使用它有什么缺点?

问题2:

每种方法的利弊是什么?请分享您的经验或一个好的链接。

欢迎任何反馈!

PS我已经尝试过Google并为此主题找到一些东西,但是我发现的唯一内容就是描述“如何”做到这一点,而不是为什么它是好是坏。


问题答案:

问题1:不幸的是,您所说的最直观的是Android中使用最少的一个。据我了解,您应该将UI(XML)和计算功能(Java类文件)分开。它还使调试更加容易。通过这种方式阅读并思考Android
imo实际上要容易得多。

问题2:我相信主要使用的两个是#2和#3。我将以Button clickButton为例。

是匿名类的形式。

Button clickButton = (Button) findViewById(R.id.clickButton);
clickButton.setOnClickListener( new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                ***Do what you want with the click here***
            }
        });

这是我的最爱,因为它在使用findViewById设置按钮变量的位置旁边具有onClick方法。处理此clickButton按钮视图的所有内容都位于此处,看起来非常整洁。

我的同事评论的一个缺点是,假设您有许多需要onclick侦听器的视图。您会看到onCreate的长度将非常长。因此,他为什么喜欢使用:

3

假设您有5个clickButton:

确保您的活动/片段实现了OnClickListener

// in OnCreate

Button mClickButton1 = (Button)findViewById(R.id.clickButton1);
mClickButton1.setOnClickListener(this);
Button mClickButton2 = (Button)findViewById(R.id.clickButton2);
mClickButton2.setOnClickListener(this);
Button mClickButton3 = (Button)findViewById(R.id.clickButton3);
mClickButton3.setOnClickListener(this);
Button mClickButton4 = (Button)findViewById(R.id.clickButton4);
mClickButton4.setOnClickListener(this);
Button mClickButton5 = (Button)findViewById(R.id.clickButton5);
mClickButton5.setOnClickListener(this);


// somewhere else in your code

public void onClick(View v) {
    switch (v.getId()) {
        case  R.id.clickButton1: {
            // do something for button 1 click
            break;
        }

        case R.id.clickButton2: {
            // do something for button 2 click
            break;
        }

        //.... etc
    }
}

正如我的同事所解释的那样,这种方式在他眼中更加整洁,因为所有onClick计算都在一个地方进行处理,而不会占用onCreate方法。但是我看到的缺点是:

  1. 看自己
  2. 并且onClick方法使用的onCreate中可能位于的其他任何对象都必须放入字段中。

让我知道您是否需要更多信息。我没有完全回答您的问题,因为这是一个很长的问题。如果我找到一些站点,我会扩展答案,现在,我只是在提供一些经验。



 类似资料:
  • 为了保持一致,我将列出它们: > 在活动中拥有类的成员,并将其分配给将在活动方法中处理逻辑的实例。 在'on Create'活动方法中创建'on ClickListener',并使用setOnClickListener将其分配给按钮 附言。我试着用谷歌搜索这个主题,但我找到的唯一的东西是描述“如何”做到这一点,而不是为什么它是好是坏。

  • 帮助处理通过适配器在ListView中设置的按钮上的单击。 我重新阅读了很多网站,都考虑过类似的任务,但都无法弄清楚并在我的代码中实现,希望大家能帮助我。提前谢谢你。

  • 如何处理ListView中的每个按钮单击?活动课 如何管理ListView中每个项目的按钮单击?我尝试了许多方法…如何解决此问题?请任何人帮帮我...

  • 问题内容: 我正在尝试向redux-form添加第二个提交按钮。 这两个按钮都应调度一个保存数据的操作,但是应根据所按下的按钮将用户路由到其他页面。 因此,我定义了一个处理程序,该处理程序作为prop 传递给表单。 但据我所知,只有表单 数据 传递给此处理程序: 注意的文档: 传递给 或传递给的函数。它将运行同步和异步验证,并且,如果表单有效,它将使用表单数据的内容进行调用。 我所缺少的是一种还将

  • 如果这个解决方案是错误的,如何处理这些点击和设置监听器? PS:请不要告诉我。

  • 我创建了类型。当它打开它时,它会向我显示两个按钮:OK和Cancel。我想在按下取消按钮时处理该操作,但我不知道如何到达该操作。我怎么才能拿到?