我已经创建了一个布局,该布局将膨胀到一个容器,这个布局包含radiobutton
问题:布局膨胀但所有单选按钮都被检查,这是错误的吗?
包含要在容器中充气的单选按钮的布局。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="23dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
容器的布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioGroup
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
代码给孩子充气
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0 ; i < 6 ; i++){
LinearLayout child =(LinearLayout) inflater.inflate(R.layout.layout_linear_with_rb,container,false);
container.addView(child);
}
答案 0 :(得分:1)
RadioGroup documentation
选择由XML布局文件中定义的单选按钮的唯一ID标识。
查看您的代码库,我发现您的RadioButton没有唯一的ID。
我制作了一个示例项目并尝试使用独特的ID动态添加RadioButton,它可以完美运行。
RadioGroup container = findViewById(R.id.container);
for (int i = 0 ; i < 6 ; i++){
RadioButton radioButton = new RadioButton(this);
radioButton.setId(i);
container.addView(radioButton);
}
在这种情况下,可能存在冲突ID的问题。也许在其他视图上设置了id为0。为避免这种混淆,我建议使用 View.generateViewId()生成唯一ID。
View.generateViewId()仅适用于API&gt; = 17。
修改1
请停止在RadioButton布局中使用LinearLayout作为父级。快速解决方法是将RadioButton布局文件更改为
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
将Java代码更改为
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0 ; i < 6 ; i++){
RadioButton radioButton = (RadioButton) inflater.inflate(R.layout.layout_linear_with_rb,container,false);
radioButton.setId(i);
container.addView(radioButton);
}
答案 1 :(得分:1)
这里的问题是RadioGroup它只查找一个RadioButton子节点,因为Im使用包含RadioButton的嵌套布局,RadioGroup无法找到以编程方式膨胀的RadioButton。
我如何解决这个问题 https://github.com/worker8/RadioGroupPlus这是一个调整RadioGroup,深入挖掘嵌套布局并在里面找到RadioButton。