«Поймать» несколько кнопок одним методом - PullRequest
1 голос
/ 14 октября 2011

Простите, если об этом уже спрашивали.Я пролистал этот сайт и многие другие и не могу найти ответ.У меня есть работающее приложение для 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
 }
}

Что я хотел бы знать, есть ли способ, которым яможет иметь универсальный метод, который будет просто ждать нажатия кнопки и захватывать эту переменную, чтобы я мог избежать нескольких операторов case-switch.Что-то на линии:

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

Любая помощь с благодарностью.ТИА

Ответы [ 3 ]

1 голос
/ 14 октября 2011

Обычно вы реализуете разные обработчики для разных кнопок, так как действие, которое будет сигнализировать кнопка, обычно отличается.

Вы можете преобразовать View в Button, используя View, который передается в качестве единственного параметра в ваш обработчик.

Button clickedButton = (Button)view;

Если все, что вас волнует, это идентификатор кнопки, и ваше действие будет основано на этом значении, то создайте отдельные обработчики.

1 голос
/ 15 октября 2011

Одна вещь, которую вы можете сделать, - это реализовать действие 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 каждой кнопки отдельно.

0 голосов
/ 14 октября 2011

Вы можете просто сделать:

clkdBtn = (Button)view;

Обычно сама кнопка не используется. getButtonClick () должен отвечать на нажатия кнопок соответствующими действиями ... Я не уверен, зачем вам нужен сам фактический вид кнопки.

Если вам нужен текст, который показывает кнопка, вы можете использовать:

String text = ((Button)view).getText();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...