我有一个radioGroup和四个radiobutton,我只想在程序运行时随机安排这些radiobutton。
说我有单选按钮r1,r2,r3,r4和一个radiogroup。 我希望有时候这些无线电按钮排列成r2,r3,r1,r4(垂直),有时还有r1,r2,r4,r3 ......等等...
我该如何实施?
答案 0 :(得分:1)
为实现随机RadioButton
随机序列,以下代码可以帮助您:
在layout.xml
文件中添加RadioGroup
:
<RadioGroup
android:id="@+id/gul_radio_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
在你的java文件中:
final int NUMBER_OF_RADIOBUTTONS_TO_ADD = 4;//Change it for other number of RadioButtons
RadioButton[] radioButton;
RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup = (RadioGroup) findViewById(R.id.gul_radio_group);
//Initializing the RadioButtons
radioButton = new RadioButton[NUMBER_OF_RADIOBUTTONS_TO_ADD];
for (int i = 0; i < NUMBER_OF_RADIOBUTTONS_TO_ADD; i++) {
radioButton[i] = new RadioButton(this);
//Text can be loaded here
radioButton[i].setText("Button " + (i + 1));
}
//Random Swapping
for (int i = 0; i < 4; i++) {//this loop is randomly changing values 4 times
int swap_ind1 = ((int) (Math.random() * 10) % NUMBER_OF_RADIOBUTTONS_TO_ADD);
int swap_ind2 = ((int) (Math.random() * 10) % NUMBER_OF_RADIOBUTTONS_TO_ADD);
RadioButton temp = radioButton[swap_ind1];
radioButton[swap_ind1] = radioButton[swap_ind2];
radioButton[swap_ind2] = temp;
}
radioButton[0].setChecked(true);//This will make the top RadioButton selected by default
//Adding RadioButtons in RadioGroup
for (int i = 0; i < NUMBER_OF_RADIOBUTTONS_TO_ADD; i++) {
radioGroup.addView(radioButton[i]);
}
}
答案 1 :(得分:0)
编写一个实现随机函数算法的函数(您可以自己编写或在互联网上找到一个 - 它们非常常见且简单)。
然后,使用addView()以编程方式将RadioButton
添加到RadioGroup
以呈现它们。使用随机函数的结果来确定&#34; index&#34; addView()函数的参数。
您的随机函数将确保每次渲染单选按钮时,它们的顺序保持随机。
<强>更新强>
为了使事情更清楚,假设您的随机函数返回以下顺序: -
2 1 4 3
现在,您需要做的是使用&#34; index&#34;来调用addView()
四次参数按顺序取得上述值。
前: -
addView(radioButton2);
addView(radioButton1);
addView(radioButton4);
addView(radioButton3);
答案 2 :(得分:0)
帖子的随机交换部分的说明:https://stackoverflow.com/a/46252387/6195457
//Random Swapping
//This loop iterates the explained process 4 times which is inside it
for (int i = 0; i < 4; i++) {
/*0,1,2,3 can be output for ((int) (Math.random() * 10) % 4)
*Math.random returns a number in between 0 to 1
*we multiply it with 10 to make the number from 0 to 10
*Taking %4 will return a number from 0 to 3*/
int swap_ind1 = ((int) (Math.random() * 10) % NUMBER_OF_RADIOBUTTONS_TO_ADD);
//Getting second random index as above
int swap_ind2 = ((int) (Math.random() * 10) % NUMBER_OF_RADIOBUTTONS_TO_ADD);
//Swapping the RadioButtons at Random indexes above
RadioButton temp = radioButton[swap_ind1];//storing value of first index in temp
radioButton[swap_ind1] = radioButton[swap_ind2];//Putting second value at first index
radioButton[swap_ind2] = temp;// putting first value at second index from temp
}