3

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

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

例如,EditText 小部件保存用户输入的任何文本,而 CheckBox 小部件保存它是否被选中。您唯一需要做的工作是为每个要保存其状态的小部件提供唯一 ID(带有 android:id 属性)。如果小部件没有 ID,则系统无法保存其状态。

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

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

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

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

旁注:如果有任何区别,我正在使用 AppCompat。

4

1 回答 1

2

尝试使用:

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

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

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

于 2016-02-07T17:20:13.343 回答