基本上,我在一个活动中有一个TextView
和两个EditText
视图。从该活动开始,将启动不同的活动。如果我按下设备上的硬件后退按钮(结束第二个活动(,视图的状态与以前相同,这很好。但是,在按下(第二个活动的(操作栏上的后退按钮后,视图将失去其先前的状态。
根据文档,如果您为视图(如EditText,TextView等小部件(提供ID,android将自动保存其状态。
例如,"编辑文本"构件保存用户输入的任何文本,复选框小部件保存是否选中。您唯一需要的工作是为要保存其状态的每个小部件提供一个唯一的 ID(带有 android:id 属性(。如果小组件没有 ID,则系统无法保存其状态。
对于需要保存其状态的每个视图,我都有一个唯一的 ID。我也尝试在XML中显式使用android:saveEnabled="true"
,textView.setSaveEnabled(true);
无济于事。
我尝试实现onSaveInstanceState
和onRestoreInstanceState
并调用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 保留并重用您的活动实例。