Android不会自动保存视图状态

时间:2016-02-07 17:12:40

标签: android android-savedstate

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

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

  

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

我为每个需要保存状态的视图都有一个唯一的ID。我还尝试在XML中明确使用android:saveEnabled="true"textView.setSaveEnabled(true);无效。

我已尝试实施onSaveInstanceStateonRestoreInstanceState并首先调用super。按预期调用onSaveInstanceState,但永远不会调用onRestoreInstanceState。此外,传递给savedInstanceState的{​​{1}}始终为onCreate

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

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

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

1 个答案:

答案 0 :(得分:2)

尝试使用:

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

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

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