-1

I have 4 buttons and want to have 1 onClickListener to detect which button was clicked (get the id of the button).

How can I achieve this?

button1 button2 button3 button4

class MainActivity : AppCompatActivity() {

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

}

I envision creating a when statement like so:

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
}

however I'm not sure how to target "any button clicked" and how the onClickListener would look in my Activity. Any idea?

Zorgan
  • 8,227
  • 23
  • 106
  • 207
  • 1
    Possible duplicate of [Multiple Buttons' OnClickListener() android](https://stackoverflow.com/questions/25905086/multiple-buttons-onclicklistener-android) – Gourav Jan 27 '19 at 10:48

3 Answers3

0

implement interface View.OnClickListener in MainActivity

class MainActivity : AppCompatActivity(), View.OnClickListener

and override 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
        }
    }

and put write

setOnClickListener(this)
Rofie Sagara
  • 289
  • 5
  • 17
0

Do not implement multiple listeners, just implement the View.OnClickListener method like this:

public class MainActivity extends Activity implements View.OnClickListener {

}

Then add this:

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..
}
}

Define button listeners:

@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);

}

Then get the Id and add click function:

@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;
}

}

This should work. Source:https://stackoverflow.com/a/25905313/9819031

But sorry that I don't know Kotlin

Gourav
  • 2,746
  • 5
  • 28
  • 45
0

As far as I understand you want to have default behavior on any button click and behaviors for each button click.

  1. Implement View.OnClickListener to your MainActivity.

class MainActivity : AppCompatActivity(), View.OnClickListener {

  1. Implement onClick(View) method in your MainAcitivity.

In your 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. Attach OnClickListeners to your Buttons.

In your constructor of 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)
}
Hyun I Kim
  • 589
  • 1
  • 3
  • 14