定位到任何按钮onClick,而不是特定的按钮

时间:2019-01-27 10:45:40

标签: android kotlin

我有4个按钮,希望有1个onClickListener来检测单击了哪个按钮(获取按钮的ID)。

我该如何实现?

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 :(得分:0)

MainActivity中的实现界面View.OnClickListener

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)

答案 1 :(得分:0)

不要实现多个侦听器,只需实现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

答案 2 :(得分:0)

据我了解,您希望任何按钮单击都具有默认行为,而每次按钮单击均具有行为。

  1. View.OnClickListener插入您的MainActivity

class MainActivity : AppCompatActivity(), View.OnClickListener {

  1. 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()
    }
}
  1. OnClickListener附加到您的Button中。

在您constructor的{​​{1}}中,

MainActivity