-1

I have a loop that creates 34 buttons, how would i set a different onclick for each one?

 while(i<34)
    {
        Button btnTag = new Button(this);
        btnTag.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        btnTag.setText(names[i]);
        btnTag.setId(i);
        btnTag.callOnClick();
        layout.addView(btnTag);
        btnTag.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                HOW TO MAKE EACH ONE DO A DIFFERENT THING

            }
        });
        i++;
    }
Cœur
  • 37,241
  • 25
  • 195
  • 267
Tom Jefferis
  • 67
  • 1
  • 7
  • 3
    Possible duplicate of [Adding onClick to buttons that are created programmatically](https://stackoverflow.com/questions/33963861/adding-onclick-to-buttons-that-are-created-programmatically) – Somesh Kumar Mar 15 '18 at 10:47

3 Answers3

1

You can make different onclick event thanks to v.getId()

while(i<34)
    {
        Button btnTag = new Button(this);
        btnTag.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        btnTag.setText(names[i]);
        btnTag.setId(i);
        btnTag.callOnClick();
        layout.addView(btnTag);
        btnTag.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                switch(v.getId())
                   {
                      // Your code
                   }

            }
        });
        i++;
    }
Niamatullah Bakhshi
  • 1,445
  • 16
  • 27
0
public void createButtons() {
    while(i<34)
    {
        Button btnTag = new Button(this);
        btnTag.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        btnTag.setText(names[i]);
        btnTag.setId(i);
        btnTag.setTag("TAG"+i); // set a tag
        btnTag.callOnClick();
        layout.addView(btnTag);
        btnTag.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonClicked(v);
            }
        });
        i++;
    }
}

// hand button click
public void buttonClicked(View view) {
    final Object tag = view.getTag();
    if ("TAG1".equals(tag)) {
        //button 1
    } else if ("TAG2".equals(tag)) {
        //button 2
    }
    // add more if else
}

Every button you will create a new OnClickListener object, prefer use one click listener object:

public void createButtons() {
    // just need one listener object
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            buttonClicked(v);
        }
    };
    while(i<34)
    {
        Button btnTag = new Button(this);
        btnTag.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        btnTag.setText(names[i]);
        btnTag.setId(i);
        btnTag.setTag("TAG"+i); // set a tag
        btnTag.callOnClick();
        layout.addView(btnTag);
        btnTag.setOnClickListener(listener);
        i++;
    }
}
goodev
  • 624
  • 1
  • 5
  • 10
0

Though what you are doing isn't practical but Here is what I would Suggest :

Make your activity implements View.OnClickListener

Implement the overrided method inside your activity.

        @override
        public void onClick(View view){
            switch(view.getId()){
// You will have to understand the buttons Ids
                case R.id.buttonId1:
                    MyFunction();
                    break;
                case R.id.buttonId2:
                    MyFunction2();
                    break;
                default:
                    break;

            }

while creating buttons use

button.setOnClickListener(this);

Your Edited Function.

public void createButtons() {
    while(i<34)
    {
        Button btnTag = new Button(this);
        btnTag.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        btnTag.setText(names[i]);
        btnTag.setId(i);
        btnTag.setTag("TAG"+i); // set a tag
        btnTag.callOnClick();
        layout.addView(btnTag);
        btnTag.setOnClickListener(this);
        i++;
    }
}
Niamatullah Bakhshi
  • 1,445
  • 16
  • 27