【发布时间】:2015-09-10 18:31:55
【问题描述】:
Android 上的动态表单可能非常令人困惑,我遇到了这种特定情况,我通过 RadioGroup 和 AppCompatRadioButtons 创建选项列表,其中 checkedId 与动态 RadioGroup 不相关:
String [] options = new String[] {"Option 1", "Option 2", "Option 3", "Option 4"};
private void buildDynamicRadioGroup(){
final LinearLayout linearLayout = new LinearLayout(MyActivity.class);
final RadioGroup radioGroup = new RadioGroup(MyActivity.class);
for(String option: options){
final AppCompatRadioButton radioButton = new AppCompatRadioButton(MyActivity.class);
radioButton.setText(option);
radioGroup.addView(radioButton);
}
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.d("Checked Group Count", group.getChildCount()); // this is always 4
Log.d("Option Id", checkedId); // this prints correctly the first time
}
});
linearLayout.addView(radioGroup);
}
第一次调用 buildDynamicRadioGroup() 看起来不错,但是对方法的每次添加调用(即 n > 1)checkedId 反映了通过调用此方法构建的 AppCompatRadioButton 的总数,而不是有问题的RadioGroup 的实际checkedId...
例如:对方法的第二次调用打印 4,如果在 RadioButtons 的 2 组中选择了 2 项,则打印 6,因为有 6 个 AppCompatRadioButtons
任何人都知道如何处理这个问题,所以我只能在 RadioGroup 的上下文中得到 checkedId 吗?
【问题讨论】:
标签: android radio-group