Android Button setOnClickListener Design Android Button setOnClickListener Design android android

Android Button setOnClickListener Design


If you're targeting 1.6 or later, you can use the android:onClick xml attribute to remove some of the repetitive code. See this blog post by Romain Guy.

<Button    android:height="wrap_content"   android:width="wrap_content"   android:onClick="myClickHandler" />

And in the Java class, use these below lines of code:

class MyActivity extends Activity {    public void myClickHandler(View target) {        // Do stuff    }}


Implement OnClickListener() on your Activity...

public class MyActivity extends Activity implements View.OnClickListener {}

For each button use...

buttonX.setOnClickListener(this);

In your Activity onClick() method test for which button it is...

@Overridepublic void onClick(View view) {    if (View.equals(buttonX))        // Do something}

Also in onClick you could use view.getId() to get the resource ID and then use that in a switch/case block to identify each button and perform the relevant action.


Android lambada solution

public void registerButtons(){    register(R.id.buttonName1, ()-> {/*Your code goes here*/});    register(R.id.buttonName2, ()-> {/*Your code goes here*/});    register(R.id.buttonName3, ()-> {/*Your code goes here*/});}private void register(int buttonResourceId, Runnable r){    findViewById(buttonResourceId).setOnClickListener(v -> r.run());}

Switch case solution solution

public void registerButtons(){    register(R.id.buttonName1);    register(R.id.buttonName2);    register(R.id.buttonName3);}private void register(int buttonResourceId){    findViewById(buttonResourceId).setOnClickListener(buttonClickListener);}private OnClickListener buttonClickListener = new OnClickListener() {    @Override    public void onClick(View v){        switch (v.getId()) {            case R.id.buttonName1:                // TODO Auto-generated method stub                break;            case R.id.buttonName2:                // TODO Auto-generated method stub                break;            case View.NO_ID:            default:                // TODO Auto-generated method stub                break;        }    }};