用一种方法“捕捉”多个按钮

时间:2011-10-14 19:38:01

标签: java android xml button android-layout

如果之前有人问过,请原谅我。我已经倾注了这个网站和许多其他人,似乎无法找到答案。我有一个有效的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

3 个答案:

答案 0 :(得分:1)

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

您可以使用ViewButton转换为View,将Button clickedButton = (Button)view; 作为唯一参数传递到处理程序中。

{{1}}

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

答案 1 :(得分: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

答案 2 :(得分:0)

你可以这样做:

clkdBtn = (Button)view;

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

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

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