Нацельте любую кнопку на клике, а не на конкретной кнопке - PullRequest
0 голосов
/ 27 января 2019

У меня есть 4 кнопки, и я хочу иметь 1 onClickListener, чтобы определить, какая кнопка была нажата (получить идентификатор кнопки).

Как мне этого добиться?

button1 button2 button3 button4

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

}

Я предполагаю создать оператор when следующим образом:

when (R.id) {
    R.id.button1 -> // do something
    R.id.button2 -> // do something
    R.id.button3 -> // do something
    R.id.button4 -> // do something
    else -> // do something
}

однако я не уверен, как настроить таргетинг на «любую нажатую кнопку» и как onClickListener будет выглядеть в моей активности. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Не реализуйте несколько слушателей, просто реализуйте метод View.OnClickListener, например, такой:

public class MainActivity extends Activity implements View.OnClickListener {

}

Затем добавьте это:

public class MainActivity extends Activity implements View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onClick(View v) {
  // default method for handling onClick Events..
}
}

Определите слушателей кнопки:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.your_layout);

Button one = (Button) findViewById(R.id.oneButton);
one.setOnClickListener(this); // calling onClick() method
Button two = (Button) findViewById(R.id.twoButton);
two.setOnClickListener(this);
Button three = (Button) findViewById(R.id.threeButton);
three.setOnClickListener(this);

}

Затем получите Id и добавьте функцию щелчка:

@Override
public void onClick(View v) {

switch (v.getId()) {

    case R.id.oneButton:
        // do your code
        break;

    case R.id.twoButton:
        // do your code
        break;

    case R.id.threeButton:
        // do your code
        break;

    default:
        break;
}

}

Это должно работать.Источник: https://stackoverflow.com/a/25905313/9819031

Но извините, что я не знаю Kotlin

0 голосов
/ 28 января 2019

Насколько я понимаю, вы хотите иметь поведение по умолчанию для любого нажатия кнопки и поведение для каждого нажатия кнопки.

  1. Реализация View.OnClickListener для вашего MainActivity.

class MainActivity : AppCompatActivity(), View.OnClickListener {

Реализация метода onClick(View) в вашем MainAcitivity.

В вашем MainActivity,

override fun onClick(v: View) {
    onAnyButtonClick()

    when(v.id) {
        R.id.button1 -> onButton1Click()
        R.id.button2 -> onButton2Click()
        R.id.button3 -> onButton3Click()
        R.id.button4 -> onButton4Click()
        else -> onOtherThanButtonClick()
    }
}
Прикрепите OnClickListener s к вашим Button s.

В вашем constructor из MainActivity,

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    button1.setOnClickListener(this)
    button2.setOnClickListener(this)
    button3.setOnClickListener(this)
    button4.setOnClickListener(this)
}
0 голосов
/ 27 января 2019

реализовать интерфейс View.OnClickListener в MainActivity

class MainActivity : AppCompatActivity(), View.OnClickListener

и переопределить onClick


    override fun onClick(p0: View?) {
        when (R.id) {
          R.id.button1 -> // do something
            R.id.button2 -> // do something
          R.id.button3 -> // do something
          R.id.button4 -> // do something
          else -> // do something
        }
    }

и поставить запись

setOnClickListener(this)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...