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

问题描述 投票:-1回答:3

我有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在我的Activity中的样子。任何的想法?

android kotlin
3个回答
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)

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


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. OnClickListeners附加到你的Buttons。

在你的constructorMainActivity

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.