为什么在使用 Kotlin 中的后退按钮导航到另一个片段并返回后片段中的 EditText 显示相同的值?

Cod*_*ike 4 navigation android-layout android-linearlayout android-fragments kotlin

我是 Android 开发和 Kotlin 的新手。我遇到了这个让我感到困惑的问题。

我在片段 A 中有 2 个 EditText 元素,每个元素都有不同的文本。当我使用后退按钮导航到片段 B 并再次返回到片段 A 时,两个 EditText 控件显示相同的值?!我不明白为什么。

屏幕转储:

步骤 1 - 具有不同值的片段 A

步骤 2 - 片段 B

第 3 步 - 从片段 B 返回导航后,片段 A 现在具有相同的值

该解决方案具有 2 个片段(片段 A 和片段 B)的单一活性。解决方案可从 Github 获得:https : //github.com/MIT-bits/singleactivity

我使用 NavGraph 在片段 A 和 B 之间导航。

片段 A 正在重用带有 EditText 的 XML 布局文件 (custom_view.xml)。每个 editText 值都在 Fragment A onViewCreated 方法中设置(见下文)

片段.kt

val data = arrayOf("Text A", "Text B", "Text C")

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        view1.editText.setText(data[0])
        view2.editText.setText(data[1])
    }
Run Code Online (Sandbox Code Playgroud)

片段_a.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AFragment">

    <LinearLayout
        android:id="@+id/createWhatAboutLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include android:id="@+id/view1" layout="@layout/custom_view"></include>

        <include android:id="@+id/view2" layout="@layout/custom_view"></include>

    </LinearLayout>

</ScrollView>
Run Code Online (Sandbox Code Playgroud)

custom_view.xml

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

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:background="#999"
        android:textSize="18sp"
        android:textColor="#111"
        android:typeface="normal"
        android:layout_margin="20dp"
        android:padding="10dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="Text" />

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

有人能看到我做错了什么或遗漏了什么吗?

任何输入都是有价值的...

Kis*_*rya 5

android:saveEnabled="false"在 EditText 中添加属性

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:background="#999"
    android:textSize="18sp"
    android:textColor="#111"
    android:typeface="normal"
    android:layout_margin="20dp"
    android:padding="10dp"
    android:saveEnabled="false"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:text="Text" />
Run Code Online (Sandbox Code Playgroud)