Android 在选择收音机时动态更改子布局

Android 在选择收音机时动态更改子布局,android,android-layout,dynamic,Android,Android Layout,Dynamic,对不起,如果我问了一个愚蠢的问题,但到目前为止,我还没找到这个问题的答案。我有两个单选按钮的形式,决定布局和使用组件的布局贝娄他们。这里是一个布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"

对不起,如果我问了一个愚蠢的问题,但到目前为止,我还没找到这个问题的答案。我有两个单选按钮的形式,决定布局和使用组件的布局贝娄他们。这里是一个布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
    <TextView
            android:id="@+id/arrival_date_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/arrival_date_label"/>
    <EditText
            android:id="@+id/arrival_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/arrival_date_label"
            android:hint="10/05/2012"/>
    <Spinner
            android:id="@+id/arrival_time_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/arrival_date"/>
    <TextView
            android:id="@+id/return_date_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/return_date_label"
            android:layout_below="@id/arrival_time_spinner"/>
    <EditText
            android:id="@+id/return_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/return_date_label"
            android:hint="10/05/2012"/>
    <Spinner
            android:id="@+id/return_time_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/return_date"/>
</RelativeLayout>
现在要将此布局添加到视图中,我在xml中执行以下操作

<RelativeLayout
            android:id="@+id/dates_layout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/flight_layout">
        <TextView
                android:id="@+id/date_label"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="@string/dates_label"
                style="@style/Label"/>
        <RadioGroup
                android:id="@+id/dates_radio_group"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_below="@id/date_label">
            <RadioButton
                    android:id="@+id/flexible_dates_radio"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/flexible_dates_label"
                    style="@style/Label"/>
            <RadioButton
                    android:id="@+id/fixed_dates_radio"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:checked="true"
                    android:text="@string/fixed_dates_label"
                    style="@style/Label"/>
        </RadioGroup>
    </RelativeLayout>
    <RelativeLayout
            android:id="@+id/stub_container"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/dates_layout">

        <com.flyweekend.android.date.view.ReturnFixedDays
                android:id="@+id/return_fixed_days_stub"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout="@layout/return_fixed_days"/>

        <com.flyweekend.android.date.view.ReturnFlexibleDays
                android:id="@+id/return_flexible_days_stub"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout="@layout/return_flexible_days"/>
    </RelativeLayout>
然而,这两个群体都不可见。我想我需要额外的一双眼睛来发现我在动态添加这些布局时出错的地方。

有了这个:

View view = inflater.inflate(R.layout.return_fixed_days, null);
您刚刚膨胀了一个布局文件,实际上并没有将其附加到自定义视图
ReturnFixedDays
。要将膨胀的布局附加到自定义视图,必须将
作为第二个参数传递(表示新膨胀视图层次结构的父级):


您的代码中可能有其他错误,因此请检查并查看这是否解决了您的问题。

是的,就是这样!很好的发现:-)@peter_budo,如果
R.layout.return\u fixed\u days
是您发布的xml布局(带有根
RelativeLayout
),您可能希望删除该父
RelativeLayout
,并用
merge
标记替换它。现在,您正在
ReturnFixedDays
(它扩展了RelativeLayout)和
R.layout.return\u fixed\u days
视图之间添加一个额外的
RelativeLayout
。是的,这是下一步,我只需要它开始运行,然后才能进行一些代码清理;)

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        context = getActivity();
        dateTypeRadioGrp = dateTypeRadioGroup(view);
        returnFixedDays = (RelativeLayout) view.findViewById(R.id.return_fixed_days_stub);
        updateDatesVisibility();
        return view;
    }

private RadioGroup dateTypeRadioGroup(View view){
        RadioGroup group = (RadioGroup)view.findViewById(R.id.dates_radio_group);
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            public void onCheckedChanged(RadioGroup radioGroup, int selected) {
                if(selected == R.id.flexible_dates_radio){
                    Log.i(TAG, "Flexible dates selected");
                    updateDatesVisibility();
                }else{
                    Log.i(TAG, "Fixed dates selected");
                    updateDatesVisibility();
                }
            }
        });
        return group;
    }

    private void updateDatesVisibility(){
        if(dateTypeRadioGrp.getCheckedRadioButtonId() == R.id.fixed_dates_radio){
            returnFixedDays.setVisibility(View.VISIBLE);
        } else{
            returnFixedDays.setVisibility(View.INVISIBLE);
        }
    }

View view = inflater.inflate(R.layout.return_fixed_days, null);
View view = inflater.inflate(R.layout.return_fixed_days, this);