【问题标题】:"Catch" Multiple Buttons with One Method用一种方法“捕捉”多个按钮
【发布时间】:2011-10-14 19:38:01
【问题描述】:

如果以前有人问过这个问题,请原谅我。我已经浏览了这个网站和许多其他网站,但似乎找不到答案。我有一个可用的 Android 应用程序,但我正在尝试清理代码。我有 3 个按钮:

public Button button1, button2, button3;

然后,我有一个“抓取”点击的方法:

public void getButtonClick(View view)
{
 switch(view.getId())
 {
  case R.id.button1:
      // Do something button1 related here
  break;

  case R.id.button2:
      // Do something button2 related here
  break;

  case R.id.button3:
      // Do something button3 related here
 }
}

我想知道的是,是否有任何方法可以让我拥有一个通用方法,它只等待按钮单击并获取该变量,这样我就可以避免多个 switch-case 语句。有点像:

public void oneMethodForAll(View view)
{
 clkdBtn = view.getButtonThatWasClicked();
 // Do stuff
}

非常感谢任何帮助。 TIA

【问题讨论】:

    标签: java android xml button android-layout


    【解决方案1】:

    您可以做的一件事是让活动实现View.OnClickListener

    public class FooActivity implements View.OnClickListener {
    
        @Override
        protected void onCreate(Bundle icicle) {
    
            Button btn1 = (Button) findViewById(R.id.button1);
            btn1.setOnClickListener(this);
    
            Button btn2 = (Button) findViewById(R.id.button2);
            btn2.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
    
            switch (view.getId()) {
            case R.id.button1:
                // Button 1 was clicked
                break;
    
            case R.id.button2:
                // Button 2 was clicked
                break;
            }
        }
    }
    

    这将为您节省一点打字时间,因为您没有创建一堆匿名点击处理程序,但您仍然需要单独设置每个按钮的 onClickListener

    【讨论】:

    • 这几乎就是我一直在做的,只是这个例子将 onClickListener() 添加到等式中。我曾希望有一种方法可以通过将单击按钮的 android:id 发送到 onClick() 方法来避免 switch-case 语句。这样做可以让应用程序的编码更简洁、更简单。看来这根本是不允许的,所以我将不得不继续我所走的道路。不过,我感谢大家的帮助。
    【解决方案2】:

    通常,您为不同的按钮实现不同的处理程序,因为按钮发出的信号通常是不同的。

    您可以使用ViewView 转换为Button,该View 作为唯一参数传递给您的处理程序。

    Button clickedButton = (Button)view;
    

    如果您只关心按钮的 id 并且您的操作将基于该值,则创建单独的处理程序。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      clkdBtn = (Button)view;
      

      但通常不使用按钮本身。 getButtonClick() 应该响应按钮按下相应的操作...我不确定你为什么需要实际的按钮视图本身。

      如果你想要按钮显示的文本,你可以使用:

      String text = ((Button)view).getText();
      

      【讨论】:

      • 我只需要按钮的 ID。如果视图不正确,那么我将更改它。我实际上已经习惯了 PHP。这是我第一次涉足 Java。
      • 按钮的ID就是view.getId()。如果您的意思是要获取按钮的变量名称(如 cancelButton),则不能这样做,您需要运行 case 语句以确定它是哪一个。要么,要么创建一个具有getNameOfButton() 方法或其他东西的自定义 Button 组件。或者,查看我的帖子。
      • 不,这是我想要的实际“android:id”。
      • view.getId() 将从按钮的 ClickListener 的 onClick() 方法中为您提供该值。
      猜你喜欢
      • 1970-01-01
      • 2015-04-01
      • 2015-02-24
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2013-05-15
      相关资源
      最近更新 更多