有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android Studio中EditText与其Id的java关系?

请仔细阅读我的问题

我正在学习Activity{}。在XML布局中,我只有一个EditText和一个TextView和某些id。当我旋转屏幕时,似乎没有任何变化,因为旋转不会影响EditText。但是,当我在{}中删除{}的{}并旋转屏幕时,旋转开始生效,{}中的文本由于旋转而被删除。我对EditText与其Id的关系感到困惑

我试图在下面的专栏中解释这个问题:

以下列名的说明

  • 有Id:EditText有Id吗
  • 旋转:手机是否已旋转
  • 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"?>
    <安卓x.constraintlayout.widget.ConstraintLayout
        xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
        xmlns:app="http://schemas.安卓.com/apk/res-auto"
        xmlns:tools="http://schemas.安卓.com/tools"
        安卓:layout_width="match_parent"
        安卓:layout_height="match_parent">

        <EditText

            安卓:layout_width="wrap_content"
            安卓:layout_height="wrap_content"
            安卓:ems="10"
            安卓:hint="Enter here"
            安卓:inputType="textPersonName"
            安卓:textSize="26sp"
            安卓: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
            安卓:id="@+id/textView2"
            安卓:layout_width="85dp"
            安卓:layout_height="25dp"
            安卓:layout_marginTop="88dp"
            安卓:text="TextView"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </安卓x.constraintlayout.widget.ConstraintLayout>

enter image description here

enter image description here

很抱歉使用了蹩脚的英语和高分辨率图片,因为我没有其他方法。致以最诚挚的问候


共 (6) 个答案

  1. # 1 楼答案

    好的,一个特定的EditText项与其id的关系是:“一对一”或“一对N”。一个版面中有一个编辑文本项。如果您在布局中配置了xml,则xml只有一个id。xml。如果定义了多个布局。xml和多个布局中的同一EditText项(具有相同的id)。xml的,则EditText具有“一对N”关系

  2. # 2 楼答案

    EditText是一个聚焦视图,因此在PhoneWindow中,它的状态将自动保存在saveHierarchyState()方法中。只有id为的EditText才能保存文本

  3. # 3 楼答案

    Android编程中最重要的一个方面是处理配置更改,其中最常见的是方向更改。尽管不建议自己处理配置更改,但由于处理配置更改的复杂性,有些情况下可能需要手动处理

    如果需要保存状态,常用的方法是实现onSaveInstanceState来存储&;还原作为包传递的值

    回到您的问题:

    Relation of EditText with its Id in Android Studio?
    

    在保存View状态时,只要调用onSaveInstanceState中的超级方法,Android操作系统就会自动调用视图层次结构中每个视图上的View.onSaveInstanceState方法。为了恢复数据,它对特定视图的状态使用android:id属性键。因此,对于您的情况,当您没有为EditText提供id时,由于缺少键,视图的状态将不会被存储

    希望这能澄清idEditText之间的关系

  4. # 4 楼答案

    在android上旋转屏幕时,应用程序中的所有活动和片段都会被销毁,然后重新创建。Android这样做是为了让您的应用程序可以基于新配置重新加载资源

    当系统销毁活动时(例如,当屏幕旋转时),尽管实际的活动实例已消失,系统仍会记住它已存在。系统使用一组保存的数据创建该活动的新实例,这些数据描述了活动被销毁时的状态

    当你为一个视图分配一个id时,android似乎会跟踪该视图。因此它会记住它的状态

  5. # 5 楼答案

    好的,当您旋转设备时,这被视为配置更改,因此系统将重新创建活动,数据将丢失

    避免这种情况的一种方法是转到清单,并为您的特定活动添加以下内容

    android:configChanges="orientation|screenSize"
    

    在这里:

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

    这使得系统忽略了设备的旋转

  6. # 6 楼答案

    在应用程序清单中,将此行添加到活动标记:

    android:configChanges="keyboardHidden|orientation|screenSize"
    

    这是因为Android基本上破坏了活动,并且每次旋转设备时都会再次创建活动。这主要是为了允许基于纵向/横向模式的不同布局

    当您对组件使用id时,数据将被分配给它的id,但当它没有id时,它将被重新创建,并且在旋转后数据将消失

    看到这些问题并阅读它们的好答案,我不会复制和粘贴它们:

    1-TextView's text disappearing when device rotated

    2-Handle screen rotation without losing data - Android