使用RadioButton将嵌套布局扩展到Container

时间:2017-12-14 08:48:12

标签: android android-layout radio-button radio-group android-inflate

我已经创建了一个布局,该布局将膨胀到一个容器,这个布局包含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);
    }

截图: RadioButton screenshot containing someview

2 个答案:

答案 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。