Связь EditText с его идентификатором в Android Studio? - PullRequest
2 голосов
/ 19 апреля 2020

Пожалуйста, внимательно прочитайте мой вопрос

Я учусь Activity LifeCycle. У меня только один EditText и TextView в моем XML макете с определенным id. Когда я поворачиваю экран, кажется, ничего не меняется, потому что вращение не влияет на EditText. Но когда я удаляю id из EditText в XML и поворачивал экран, влияние поворота начинается, и текст в editText удалялся из-за поворота. Меня смущает связь EditText с его идентификатором.

Я попытался объяснить проблему ниже в столбцах:

Объяснение ниже названий столбцов

  • Наличие идентификатора: есть ли у EditText идентификатор?
  • Вращение: телефон повернулся или нет
  • EditText: Что происходит с EditText после поворота.

.

Having Id ---------------- Rotation --------------- EditText

Yes                  Rotated            Does not change

No                   Rotated             Yes, Text Removed from editText

MainActivity.java пусто и main_activity.xml код указан ниже:


    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Enter here"
            android:inputType="textPersonName"
            android:textSize="26sp"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"

            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.371" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="85dp"
            android:layout_height="25dp"
            android:layout_marginTop="88dp"
            android:text="TextView"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>

enter image description here

enter image description here

Извините за использование плохих снимков Engli sh и высокого разрешения, поскольку у меня нет других способов. С наилучшими пожеланиями

Ответы [ 4 ]

0 голосов
/ 19 апреля 2020

В манифесте вашего приложения добавьте эту строку в активность тег:

android:configChanges="keyboardHidden|orientation|screenSize"

Причина этого заключается в том, что Android в основном уничтожает действие и создает его снова каждый раз время, когда вы поворачиваете устройство. Это главным образом позволяет использовать разные макеты в зависимости от портретного / ландшафтного режима.

Когда вы используете id для вашего компонента, данные будут присвоены его id, но если он не имеет id , он будет воссоздан, а данные исчезнут после поворота.

Смотрите эти вопросы и читайте их хорошие ответы, я не копирую и не вставляю их:

1- TextView's text исчезает при повороте устройства

2- Управление поворотом экрана без потери данных - Android

0 голосов
/ 19 апреля 2020

Хорошо, когда вы поворачиваете устройство, это считается изменением конфигурации, поэтому система воссоздает действие, и данные теряются.

Один из способов избежать этого - go для манифеста и для вашего указания. c активность добавить это

android:configChanges="orientation|screenSize"

здесь:

<activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize"
....
...

Это заставляет систему игнорировать вращение устройства.

0 голосов
/ 19 апреля 2020

EditText - это сфокусированное представление, поэтому в PhoneWindow его состояние будет автоматически сохранено в методе saveHierarchyState(). Только EditText с идентификатором собирается сохранить текст.

0 голосов
/ 19 апреля 2020

Когда вы поворачиваете экран на android, все действия и фрагменты в вашем приложении уничтожаются, а затем воссоздаются. Android делает это так, чтобы ваше приложение могло перезагрузить ресурсы на основе новой конфигурации.

Когда система уничтожает действие (например, когда экран вращается), тогда, хотя фактический экземпляр действия пропал, система запоминает, что это существовало. Система создает новый экземпляр этого действия, используя набор сохраненных данных, которые описывают состояние действия, когда оно было уничтожено.

Когда вы назначаете идентификатор для представления, кажется, что android отслеживает это мнение. Следовательно, он запоминает свое состояние.

...