如何在android中随机排列单选按钮?

如何在android中随机排列单选按钮?,android,android-radiobutton,Android,Android Radiobutton,我有一个radioGroup和四个radiobutton,我只想在程序运行时随机排列这些radiobutton 假设我有单选按钮r1、r2、r3、r4和一个放射组。 我希望有时候这些单选按钮像r2、r3、r1、r4(垂直)排列,有时候像r1、r2、r4、r3等等 我如何实现这一点 编写一个实现随机函数算法的函数(您可以编写自己的或在internet上找到一个,它们非常常见且简单) 然后,以编程方式将单选按钮s添加到RadioGroup中,使用来渲染它们。使用随机函数的结果确定addView()函

我有一个radioGroup和四个radiobutton,我只想在程序运行时随机排列这些radiobutton

假设我有单选按钮r1、r2、r3、r4和一个放射组。 我希望有时候这些单选按钮像r2、r3、r1、r4(垂直)排列,有时候像r1、r2、r4、r3等等


我如何实现这一点

编写一个实现随机函数算法的函数(您可以编写自己的或在internet上找到一个,它们非常常见且简单)

然后,以编程方式将
单选按钮
s添加到
RadioGroup
中,使用来渲染它们。使用随机函数的结果确定addView()函数的“index”参数

随机函数将确保每次渲染单选按钮时,它们的顺序都是随机的

更新

为了让事情更清楚,假设您的随机函数返回以下顺序:-

二, 1. 4. 三,

现在,您需要做的是调用
addView()
四次,其中“index”参数依次取上述值

例:-


对于实现随机
单选按钮
随机序列,以下代码将帮助您:

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]);
        }
    }
单选按钮到添加按钮的最终整数=4//将其更改为其他数量的单选按钮
单选按钮[]单选按钮;
放射组放射组;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
放射组=(放射组)findViewById(R.id.gul_radio_组);
//初始化单选按钮
radioButton=新的radioButton[要添加的radioButton数量];
对于(int i=0;i<单选按钮的数量\u到\u添加;i++){
radioButton[i]=新的radioButton(本);
//文本可以在这里加载
单选按钮[i].setText(“按钮”+(i+1));
}
//随机交换
对于(inti=0;i<4;i++){//此循环随机更改值4次
int swap_ind1=((int)(Math.random()*10)%u要添加的单选按钮数);
int swap_ind2=((int)(Math.random()*10)%u要添加的单选按钮数);
RadioButton temp=RadioButton[swap_ind1];
radioButton[swap_ind1]=radioButton[swap_ind2];
单选按钮[swap_ind2]=温度;
}
radioButton[0]。setChecked(true);//这将使顶部的radioButton在默认情况下处于选中状态
//在RadioGroup中添加单选按钮
对于(int i=0;i<单选按钮的数量\u到\u添加;i++){
radioGroup.addView(单选按钮[i]);
}
}

文章中随机交换部分的说明:

//随机交换
//该循环将其内部的解释过程迭代4次
对于(int i=0;i<4;i++){
/*可以为((int)(Math.random()*10)%4)输出0,1,2,3
*Math.random返回一个介于0到1之间的数字
*我们把它乘以10,使数字从0到10
*获取%4将返回一个从0到3的数字*/
int swap_ind1=((int)(Math.random()*10)%u要添加的单选按钮数);
//如上所述获取第二个随机索引
int swap_ind2=((int)(Math.random()*10)%u要添加的单选按钮数);
//在上面的随机索引处交换单选按钮
RadioButton temp=RadioButton[swap_ind1];//在temp中存储第一个索引的值
radioButton[swap_ind1]=radioButton[swap_ind2];//将第二个值放入第一个索引
单选按钮[swap_ind2]=temp;//将第一个值放在temp的第二个索引中
}

您必须以编程方式创建无线组,并将其添加到xml父项中。因此,您每次都可以更改它们的位置(随机)。我所有的小部件都是通过编程方式创建的(单选按钮和组),因此我正在寻找一种自动实现它的方法(可能是函数或方法)@pratiktankThank!!作为参数,我必须有一个单选按钮数组?我说的对吗?嗯,我不认为你可以用数组作为参数。无论如何,您不需要数组。让我更新我的答案,让它更清晰!它似乎不起作用,因为生成的数字必须按顺序插入。就像0,1,2,3,否则它会抛出一个未绑定的异常,我会使用描述中记录的方法。但是,你是对的-一个简单的
添加视图(radioButton)
会更好。谢谢,它能工作!!你能解释一下随机交换部分吗?不客气,我已经在这篇文章中解释了这个过程
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]);
        }
    }
  //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
        }