kotlin Android屏幕旋转不按预期工作

5lhxktic  于 2023-03-30  发布在  Kotlin
关注(0)|答案(2)|浏览(177)

我读过一些Android文档,当我们旋转屏幕时,由于调用onCreate方法,用户输入的内容被破坏。所以我们需要保存/恢复代码,以防止旋转时数据丢失。我只是尝试了一个只有一个EditText的简单应用程序。在EditText中输入一些文本后,屏幕旋转后没有清除(破坏)。
屏幕旋转后EditText内容不被清除是正确的吗?为什么我们需要保存/恢复代码来进行屏幕旋转?

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
<?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"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editTextTextPersonName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="76dp"
        android:layout_marginTop="56dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

旋转后,我以为用户文本应该被清除。但是用户输入没有被清除。

6qfn3psc

6qfn3psc1#

由于您为EditText提供了唯一的ID,因此Android将在保留EditText值的情况下为您处理方向。
如果您没有为EditText提供ID,则EditText值将被清除。

nc1teljy

nc1teljy2#

在TextView和EditText的情况下。两者都有数据。当屏幕方向改变时,EditText中的数据保留,但TextView数据被清除。

<TextView 
     ... 
     android:freezesText="true" />

从freezesText上的文档。这将有助于将数据保存在TextView中。

<EditText
     ...
     android:saveEnabled="false"/>

上述属性有助于处理EditText的行为。

相关问题