ejmtv
ejmtv

Reputation: 198

How to set Button Id's by Looping through Array of Id's and set button texts using loops as well?

I am trying to set the id's of 5 (five) buttons programatically and shuffle them every time.
There's no problem with shuffle.

I get errors when I use 2 (two) methods that shuffles and set id of 5 buttons AND set the texts of each one.
I know this could be a mess because it's my first time to try for-each loop.
Please help. Thank you.

Button b1, b2, b3, b4, b5;
Button[] buttons = { b1, b2, b3, b4, b5 };

    public void shuffleButtons() {

            Integer[] Id = { R.id.bChoice1, R.id.bChoice2, R.id.bChoice3,
                    R.id.bChoice4, R.id.bChoice5 };

            ArrayList<Integer> buttonId = new ArrayList<Integer>(Arrays.asList(Id));

            Collections.shuffle(buttonId);


                for (int x = 0; x < 5; x++) {

                    for (Button b : buttons) {

                        b = (Button) findViewById(buttonId.get(x));

                    }

                }


        }

public void setButtonTxt() {


            for (Button b : buttons) {

                for (int x = 0; x <= buttons.length; x++) {

                    b.setText(textList.get(x));

                }
            }

    }

Upvotes: 0

Views: 1245

Answers (3)

hsasan rajaee
hsasan rajaee

Reputation: 25

it's better for you to write your code in this way :

Button [] buttens=new Button[5];
final int ID= R.id.bChoice1;
for (int i = 0; i < 5; i++) {
        button[i]=(Button)findViewById(ID+i);
    }

but be careful it works as long as you set your button id's consecutively !

Upvotes: 0

Kirk
Kirk

Reputation: 16245

In short, I'm guessing your issue is x <= buttons.length should be x < buttons.length in your for loop. However it looks like you're going to set all 5 buttons to textList.get(5) with the current code you have.

Why not try with preset buttons in XML?

<Button android:id="@+id/bChoice1" ... />
<!-- etc -->
<Button android:id="@+id/bChoice5" ... />

Then in the code behind, randomize the text instead of both?

Button b1 = (Button)findViewById(R.id.bChoice1);
Button b2 = (Button)findViewById(R.id.bChoice2);
Button b3 = (Button)findViewById(R.id.bChoice3);
Button b4 = (Button)findViewById(R.id.bChoice4);
Button b5 = (Button)findViewById(R.id.bChoice5);

// assuming textList is an ArrayList of text items
// the next two lines will randomize your textList order
// so you don't need to do it yourself and much less
// error-prone
long seed = System.nanoTime();
Collections.shuffle(textList, new Random(seed));

b1.setText(textList.get(0));
b2.setText(textList.get(1));
b3.setText(textList.get(2));
b4.setText(textList.get(3));
b5.setText(textList.get(4));

Upvotes: 0

Simon Dorociak
Simon Dorociak

Reputation: 33505

I am trying to set the id's of 5 (five) buttons programatically and shuffle them every time. There's no problem with shuffle.

My suggestion is that you shoudn't, musn't do it. Each id should be created from XML and then each is automatic generated in R.java as static int field.

You should respect this rule and don't create "spaghetti code".

Upvotes: 2

Related Questions