#android #xml #layout
#Android #xml #макет
Вопрос:
Я использую пользовательский макет для средства выбора даты и времени, который содержит флажок. Этот пользовательский макет используется дважды в родительском макете. При изменении ориентации устройства состояние флажка для обоих флажков автоматически устанавливается в состояние флажка для второго флажка.
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>
При изменении ориентации устройства должно сохраняться отмеченное состояние первого флажка.
Ответ №1:
Укажите идентификатор в своем макете следующим образом
<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"
Комментарии:
1. Спасибо за ваш ответ. Но я использую привязку данных с этим, поэтому я не могу использовать
findViewById()
2. Таким образом, вы можете использовать подобные binding.vCb1.picker и binding.vCb2.picker
3. Прошу прощения. Мне это ни в чем не помогает. Зачем мне нужно создавать подобные объекты?
4. для дифференцирования обоих флажков.
Ответ №2:
Попробуйте сохранить фактические состояния методом two booleans
in onSaveInstance
. Затем восстановите значения в onRestoreInstance
и установите значения в checkBox
. Надеюсь, это поможет!