我正在使用日期和时间选择器的自定义布局,其中包含一个复选框。 此自定义布局在父布局中使用了两次。 更改设备方向时,两个复选框的选中状态都会自动设置为第二个复选框的选中状态。
parent.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_normal"
android:divider="?android:dividerHorizontal"
android:orientation="vertical"
android:showDividers="beginning">
...
<include
layout="@layout/time_picker" />
<include
layout="@layout/time_picker" />
...
</LinearLayout>
time_picker.xml
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
...
<CheckBox
android:id="@+id/picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/use_date_time_picker"
android:textSize="@dimen/text_size_extra_small"
android:checked="true" />
</LinearLayout>
</layout>
在更改设备方向时,第一复选框的选中状态应保留。
答案 0 :(得分:0)
尝试使用booleans
方法将实际状态保存在两个onSaveInstance
中。然后恢复onRestoreInstance
中的值,并将值设置为checkBox
。希望对您有帮助!
答案 1 :(得分:0)
在您的布局中提供这样的ID
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_normal"
android:divider="?android:dividerHorizontal"
android:orientation="vertical"
android:showDividers="beginning">
<include
android:id="@+id/vCb1"
layout="@layout/time_picker" />
<include
android:id="@+id/vCb2"
layout="@layout/time_picker" />
</LinearLayout>
现在制作这样的对象
View vCb1 = findViewById(R.id.vCb1);
View vCb2 = findViewById(R.id.vCb2);
CheckBox cb1 = vCb1.findViewById(R.id.picker);
CheckBox cb2 = vCb2.findViewById(R.id.picker);
也将此行放在AndroidManifest中的标记中
android:configChanges="orientation"