Изменение состояния флажка при повороте устройства при двукратном использовании пользовательского макета

#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 . Надеюсь, это поможет!