gpt4 book ai didi

android - RadioGroup onCheckChanged(RadioGroup radioGroup, int checkedId) 无法正常使用动态表单

转载 作者:太空狗 更新时间:2023-10-29 14:05:47 35 4
gpt4 key购买 nike

Android 上的动态表单可能非常困惑,我遇到过这种特殊情况,我通过 RadioGroupAppCompatRadioButton 创建了一个选项列表,其中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 都反射(reflect)了总计数AppCompatRadioButton 是通过调用此方法构建的,而不是相关 RadioGroup 的实际 checkedId...

例如:如果在第 2 组 RadioButton 中选择了第 2 个项目,则第二次调用该方法打印 4 和 6,因为有 6 个 AppCompatRadioButton

任何人都知道如何处理这个,所以我只能在 RadioGroup 的上下文中获取 checkedId 吗?

最佳答案

就在今天,我遇到了同样的问题,在寻找解决方案时发现了你的问题。唯一的区别是我从 XML 资源加载 RadioButtons

对我来说,问题是所有单选按钮都有相同的 ID。 RadioGroup 在切换单选按钮的状态时使用这些 ID。

我可以通过在将单选按钮添加到 RadioGroup 之前更改单选按钮的 ID 来解决我的问题。因此,我只是添加了一个随机的正 ID:

private View createViewForButton(                                            
final Context context,
final Option radioButton) {

final View view =
getLayoutInflater(context).inflate(R.layout.form_radiobutton, null);

final RadioButton label = (RadioButton) view.findViewById(R.id.label_view);
label.setText(radioButton.getValue());

makeButtonWorkingInRadioGroup(view);

return view;
}

private void makeButtonWorkingInRadioGroup(final View view) {
// The radio group requires all RadioButtons to have different IDs to
// work correctly. This wouldn't work else as we are loading all
// RadioButtons from the same XML file having the same ID definition.
view.setId(View.generateViewId());
}

确保您设置的 ID 是正数。对于负 ID,它也不起作用。

关于android - RadioGroup onCheckChanged(RadioGroup radioGroup, int checkedId) 无法正常使用动态表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509267/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com