Android Studio中EditText与其Id的java关系?
请仔细阅读我的问题
我正在学习Activity
{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>
很抱歉使用了蹩脚的英语和高分辨率图片,因为我没有其他方法。致以最诚挚的问候
# 1 楼答案
好的,一个特定的EditText项与其id的关系是:“一对一”或“一对N”。一个版面中有一个编辑文本项。如果您在布局中配置了xml,则xml只有一个id。xml。如果定义了多个布局。xml和多个布局中的同一EditText项(具有相同的id)。xml的,则EditText具有“一对N”关系
# 2 楼答案
EditText
是一个聚焦视图,因此在PhoneWindow
中,它的状态将自动保存在saveHierarchyState()
方法中。只有id为的EditText
才能保存文本# 3 楼答案
Android编程中最重要的一个方面是处理配置更改,其中最常见的是方向更改。尽管不建议自己处理配置更改,但由于处理配置更改的复杂性,有些情况下可能需要手动处理
如果需要保存状态,常用的方法是实现
onSaveInstanceState
来存储&;还原作为包传递的值回到您的问题:
在保存
View
状态时,只要调用onSaveInstanceState
中的超级方法,Android操作系统就会自动调用视图层次结构中每个视图上的View.onSaveInstanceState
方法。为了恢复数据,它对特定视图的状态使用android:id
属性键。因此,对于您的情况,当您没有为EditText
提供id
时,由于缺少键,视图的状态将不会被存储希望这能澄清
id
与EditText
之间的关系# 4 楼答案
在android上旋转屏幕时,应用程序中的所有活动和片段都会被销毁,然后重新创建。Android这样做是为了让您的应用程序可以基于新配置重新加载资源
当系统销毁活动时(例如,当屏幕旋转时),尽管实际的活动实例已消失,系统仍会记住它已存在。系统使用一组保存的数据创建该活动的新实例,这些数据描述了活动被销毁时的状态
当你为一个视图分配一个id时,android似乎会跟踪该视图。因此它会记住它的状态
# 5 楼答案
好的,当您旋转设备时,这被视为配置更改,因此系统将重新创建活动,数据将丢失
避免这种情况的一种方法是转到清单,并为您的特定活动添加以下内容
在这里:
这使得系统忽略了设备的旋转
# 6 楼答案
在应用程序清单中,将此行添加到活动标记:
这是因为Android基本上破坏了活动,并且每次旋转设备时都会再次创建活动。这主要是为了允许基于纵向/横向模式的不同布局
当您对组件使用
id
时,数据将被分配给它的id
,但当它没有id
时,它将被重新创建,并且在旋转后数据将消失看到这些问题并阅读它们的好答案,我不会复制和粘贴它们:
1-TextView's text disappearing when device rotated
2-Handle screen rotation without losing data - Android