我在视图中有两个单选按钮组,用于我的用户选择所需的显示颜色的对话框。由于大小限制,我创建了两个组。因为这两个组在分离时不保持互斥,我需要检查从group1到group2的更改并清除其他组中的选择。我这样做是通过向每个组添加一个onCheckedChangeListener(),如下所示:
RadioGroup rGroup1 = (RadioGroup)currentDialog.findViewById(R.id.rgColors1);
rGroup1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(checkedId != -1)
{
RadioGroup rGroup2 = (RadioGroup) currentDialog.findViewById(R.id.rgColors2);
rGroup2.clearCheck();
}
}
});
RadioGroup rGroup2 = (RadioGroup) currentDialog.findViewById(R.id.rgColors2);
rGroup2.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(checkedId != -1)
{
RadioGroup rGroup1 = (RadioGroup) currentDialog.findViewById(R.id.rgColors1);
rGroup1.clearCheck();
}
}
});
我的Dialog布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/colorDialogLinearLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:minWidth="300dp"
android:orientation="vertical">
<TableLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tableLayout"
android:padding="5dp">
<TableRow android:gravity="center">
<RadioGroup android:id="@+id/rgColors1">
<RadioButton android:id="@+id/black_radio"
android:text="@string/option_black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton android:id="@+id/blue_radio"
android:text="@string/option_blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton android:id="@+id/green_radio"
android:text="@string/option_green"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton android:id="@+id/orange_radio"
android:text="@string/option_orange"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton android:id="@+id/pink_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/option_pink" />
</RadioGroup>
<RadioGroup android:id="@+id/rgColors2">
<RadioButton android:id="@+id/purple_radio"
android:text="@string/option_purple"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton android:id="@+id/red_radio"
android:text="@string/option_red"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton android:id="@+id/teal_radio"
android:text="@string/option_teal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton android:id="@+id/yellow_radio"
android:text="@string/option_yellow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RadioGroup>
</TableRow>
</TableLayout>
<Button android:id="@+id/setBackColorButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/button_set_back_color"/>
当从任一组中选择单选按钮时,则不清除其不属于的组。我遇到的问题是所选的单选按钮未显示为已选中,必须再次选中。我怀疑clearCheck()是为两个radiogroup运行但我不知道为什么或如何防止这种行为。任何帮助将不胜感激。
答案 0 :(得分:0)
最后,我必须为每个单选按钮创建一个onclick()事件。我认为我的第一种方法不起作用的原因是因为在将选择设置为none时会触发onselectchange()事件。在测试使用这种将第二组设置为无的方法的各种方法导致需要第二次执行选择或者将两个组的无限循环彼此设置为无。我相信需要第二次执行选择的情况是因为该过程没有将控制权返回给调用过程来完成选择。我对Android有点绿色,所以我可能完全偏离基础。最后,单独的onclick()事件确实有效。