Android 不会自动保存视图状态

Android doesn't automatically save view states

基本上,我在一个 activity 中有一个 TextView 和两个 EditText 视图。从那个 activity 开始,一个不同的 activity 开始了。如果我按下设备上的硬件后退按钮(结束第二个 activity),视图的状态与之前相同,这很好。但是,在按下操作栏上的后退按钮(第二个 activity)后,视图将失去之前的状态。

根据文档,如果您为视图(EditText、TextView 等小部件)提供 ID,android 将自动保存它们的状态。

For example, the EditText widget saves any text entered by the user and the CheckBox widget saves whether it's checked or not. The only work required of you is to provide a unique ID (with the android:id attribute) for each widget you want to save its state. If a widget does not have an ID, then the system cannot save its state.

我为每个需要保存其状态的视图设置了唯一 ID。我也尝试过在 XML 和 textView.setSaveEnabled(true); 中明确使用 android:saveEnabled="true" 无济于事。

我已经尝试实施 onSaveInstanceStateonRestoreInstanceState 并首先为两者调用 superonSaveInstanceState 按预期被调用,但 onRestoreInstanceState 从未被调用。此外,传递给 onCreatesavedInstanceState 始终是 null.

在清单中,我尝试了 android:alwaysRetainTaskState="true"android:stateNotNeeded="false",但没有成功。

我可以 post 编写代码,但我不确定哪些代码是相关的,因为系统似乎没有按预期运行。有什么可能导致 android 无法自动保存视图的状态?感谢任何帮助,如果需要,我可以 post 特定代码。

旁注:如果它有任何不同,我正在使用 AppCompat。

尝试使用:

    <activity
        android:name=".MyActivity"
        android:label="@string/activity_title"
        android:launchMode="singleTop"
        android:parentActivityName=".MyActivityParent">
    </activity>

注意 android:launchMode="singleTop" 属性。

默认情况下,当用户按下后退按钮时,会创建一个新的 Intent,而您的 Activity 会从头开始重新创建。以这种方式设置 launchMode 属性告诉 ART 保留和重用 Activity.

的实例