安卓不会自动保存视图状态



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

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

例如,"编辑文本"构件保存用户输入的任何文本,复选框小部件保存是否选中。您唯一需要的工作是为要保存其状态的每个小部件提供一个唯一的 ID(带有 android:id 属性(。如果小组件没有 ID,则系统无法保存其状态。

对于需要保存其状态的每个视图,我都有一个唯一的 ID。我也尝试在XML中显式使用android:saveEnabled="true"textView.setSaveEnabled(true);无济于事。

我尝试实现onSaveInstanceStateonRestoreInstanceState并调用super两者的第一件事。 onSaveInstanceState按预期调用,但从不调用onRestoreInstanceState。此外,传递给onCreate savedInstanceState总是null

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

我可以发布代码,但我不确定哪些代码是相关的,因为系统似乎没有做它应该做的事情。什么可能导致视图的状态不被安卓自动保存?任何帮助都值得赞赏,如果需要,我可以发布特定的代码。

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

尝试使用:

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

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

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

最新更新