0

我正在尝试以编程方式设置 5(五)个按钮的 id,并每次都将它们随机播放。
洗牌没有问题。

当我使用 2(两种)方法来洗牌并设置 5 个按钮的 id 并设置每个按钮的文本时,我会遇到错误。
我知道这可能会一团糟,因为这是我第一次尝试 for-each 循环。
请帮忙。谢谢你。

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

                }
            }

    }
4

3 回答 3

2

我正在尝试以编程方式设置 5(五)个按钮的 id,并每次都将它们随机播放。洗牌没有问题。

我的建议是你不应该,不应该这样做。每个 id 都应该从创建XML,然后每个 id 都是R.java作为静态 int 字段自动生成的。

你应该尊重这条规则,不要创建“意大利面条代码”。

于 2013-02-18T20:18:41.117 回答
0

简而言之,我猜你的问题x <= buttons.length应该x < buttons.length在你的 for 循环中。但是,您似乎将textList.get(5)使用您拥有的当前代码将所有 5 个按钮设置为。

为什么不尝试使用 XML 中的预设按钮?

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

然后在后面的代码中,随机化文本而不是两者?

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));
于 2013-02-18T20:29:16.307 回答
0

最好以这种方式编写代码:

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

但请注意,只要您连续设置按钮 ID,它就可以工作!

于 2017-08-07T05:45:50.153 回答