说明:一开始也是要用RadioGroup来添加单选按钮,但是想分成两行,原先想的办法是用一个RadioGroup内部嵌套两个LinearLayout,在添加RadioButton,但是发现在添加
setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
监听器时候发现没效果了,百度其他大佬的文章也是不太好实现,之后我改成两个RadioGroup去实现,发先独自的一行可以实现了,但是出现了两个选项被选中的状态,后来百度说可以在点击其中一个Group的Button的时候用clearCheck()去清除另一个Group的选中状态,但是发现在监听器里面这个会报错StackOveflowError错误,实在难受,之后我用了一个最简单的办法,代码在下面,边讲解边看代码
先上效果图:
接下来就是代码
下面是XML的布局代码
(一些样式的设置就不给出来了,大体实现这个功能的代码在)
<RadioGroup
android:id="@+id/radiogroup_equip_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_marginTop="10dp">
<RadioButton
android:id="@+id/radiobtn_arms"
android:layout_width="40dp"
android:layout_height="25sp"
android:text="武 器"
android:textSize="13sp"
android:textColor="@color/text_lavender_yellow"
android:checked="true"
android:button="@null"
android:gravity="center"
android:background="@drawable/imageview_chapter_btn"
/>
<RadioButton
android:id="@+id/radiobtn_clothes"
android:layout_width="40dp"
android:layout_height="25sp"
android:text="衣 服"
android:textSize="13sp"
android:textColor="@color/text_lavender_yellow"
android:button="@null"
android:gravity="center"
android:background="@drawable/imageview_chapter_btn"
android:layout_marginLeft="25dp"
/>
<RadioButton
android:id="@+id/radiobtn_trousers"
android:layout_width="40dp"
android:layout_height="25sp"
android:text="裤 子"
android:textSize="13sp"
android:textColor="@color/text_lavender_yellow"
android:button="@null"
android:gravity="center"
android:background="@drawable/imageview_chapter_btn"
android:layout_marginLeft="25dp"
/>
<RadioButton
android:id="@+id/radiobtn_title"
android:layout_width="40dp"
android:layout_height="25sp"
android:text="称 号"
android:textSize="13sp"
android:textColor="@color/text_lavender_yellow"
android:button="@null"
android:gravity="center"
android:background="@drawable/imageview_chapter_btn"
android:layout_marginLeft="25dp"
/>
</RadioGroup>
<RadioGroup
android:id="@+id/radiogroup_equip_two"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_marginTop="5dp"
android:layout_marginBottom="10dp">
<RadioButton
android:id="@+id/radiobtn_necklace"
android:layout_width="40dp"
android:layout_height="25sp"
android:text="项 链"
android:textSize="13sp"
android:textColor="@color/text_lavender_yellow"
android:button="@null"
android:gravity="center"
android:background="@drawable/imageview_chapter_btn"
/>
<RadioButton
android:id="@+id/radiobtn_ring"
android:layout_width="40dp"
android:layout_height="25sp"
android:text="戒 指"
android:textSize="13sp"
android:textColor="@color/text_lavender_yellow"
android:button="@null"
android:gravity="center"
android:background="@drawable/imageview_chapter_btn"
android:layout_marginLeft="25dp"
/>
<RadioButton
android:id="@+id/radiobtn_bracelet"
android:layout_width="40dp"
android:layout_height="25sp"
android:text="手 镯"
android:textSize="13sp"
android:textColor="@color/text_lavender_yellow"
android:button="@null"
android:gravity="center"
android:background="@drawable/imageview_chapter_btn"
android:layout_marginLeft="25dp"
/>
<RadioButton
android:id="@+id/radiobtn_horcruxes"
android:layout_width="40dp"
android:layout_height="25sp"
android:text="魂 器"
android:textSize="13sp"
android:textColor="@color/text_lavender_yellow"
android:button="@null"
android:gravity="center"
android:background="@drawable/imageview_chapter_btn"
android:layout_marginLeft="25dp"
/>
</RadioGroup>
Activity的java代码
radiogroup_equip_one = findViewById(R.id.radiogroup_equip_one);//这个两个是RadioGroup
radiogroup_equip_two = findViewById(R.id.radiogroup_equip_two);
radiobtn_arms = findViewById(R.id.radiobtn_arms);//这下面是RadioButton
radiobtn_clothes = findViewById(R.id.radiobtn_clothes);
radiobtn_trousers = findViewById(R.id.radiobtn_trousers);
radiobtn_title = findViewById(R.id.radiobtn_title);
radiobtn_necklace = findViewById(R.id.radiobtn_necklace);
radiobtn_ring = findViewById(R.id.radiobtn_ring);
radiobtn_bracelet = findViewById(R.id.radiobtn_bracelet);
radiobtn_horcruxes = findViewById(R.id.radiobtn_horcruxes);
lay_bag_show_equip = findViewById(R.id.lay_bag_show_equip);
btn_order_splitting = findViewById(R.id.btn_order_splitting);
isSelectOne = true;//重点就是这个
radiogroup_equip_one.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//消除第二行选中状态
if(isSelectOne == false){//判断之前选中是第二行也就是false,这时候对第一行进行操作
radiobtn_necklace.setChecked(false);//这四个是第二行的RadioButton
radiobtn_ring.setChecked(false);
radiobtn_bracelet.setChecked(false);
radiobtn_horcruxes.setChecked(false);
RadioButton radioButton_equip = radiogroup_equip_one.findViewById(checkedId);
String radiobutton_name = radioButton_equip.getText().toString();
if(radiobutton_name.equals(radiobtn_arms.getText().toString())){//下面是对选中的RadioButton进行选中
radiobtn_arms.setChecked(true);
}else if (radiobutton_name.equals(radiobtn_clothes.getText().toString())){
radiobtn_clothes.setChecked(true);
}else if (radiobutton_name.equals(radiobtn_trousers.getText().toString())){
radiobtn_trousers.setChecked(true);
}else if (radiobutton_name.equals(radiobtn_title.getText().toString())){
radiobtn_title.setChecked(true);
}
isSelectOne = true;
}
}
});
radiogroup_equip_two.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//清除第一行选中状态
if(isSelectOne == true){//判断之前选中是第一行也就是true,这时候对第二行进行操作
radiobtn_arms.setChecked(false);//下面四个是第一行的RadioButton
radiobtn_clothes.setChecked(false);
radiobtn_trousers.setChecked(false);
radiobtn_title.setChecked(false);
RadioButton radioButton_equip = radiogroup_equip_two.findViewById(checkedId);
String radiobutton_name = radioButton_equip.getText().toString();
if (radiobutton_name.equals(radiobtn_necklace.getText().toString())){//下面是对选中的RadioButton进行选中
radiobtn_necklace.setChecked(true);
}else if (radiobutton_name.equals(radiobtn_ring.getText().toString())){
radiobtn_ring.setChecked(true);
}else if (radiobutton_name.equals(radiobtn_bracelet.getText().toString())){
radiobtn_bracelet.setChecked(true);
}else if (radiobutton_name.equals(radiobtn_horcruxes.getText().toString())){
radiobtn_horcruxes.setChecked(true);
}
isSelectOne = false;
}
}
});
讲解解决原理
这里是自己的理解,如果有异议可以评论指出,首先如果没有 isSelectOne 这个判断的话,直接进行选中事件监听器的操作,其中在第一个RadioGroup里面有对第二个的RadioButton的设置操作,就是那修改四个的选中状态,这里一但修改了第二个RadioButton,就会触发第二个的监听器,所以就会执行第二个里面的操作,其中却反过来对第一个进行选中修改为false,这就矛盾了,所以添加一个全局的boolean变量来进行判断,就可以避免,最后实现结果,如果要实现多行的RadioGroup,一样加判断就行,就是代码量会多,我看网上也有直接重写RadioGroup的也可以,主要看大家程序适合哪个了。
最后
这是第一次写CSDN文章,布局和讲解怪怪的,希望大家不要建议,有对我的代码不懂的可以在评论区留言,我有空就会回你们的,感谢能看到这里的朋友们,大家一起努力啦!!!