基本上,我在一个活动中有TextView
个和EditText
个观看次数。从该活动开始,开始不同的活动。如果我按下设备上的硬件后退按钮(结束第二个活动),则视图的状态与之前相同,这很好。但是,按下操作栏上的后退按钮(第二个活动)后,视图将失去之前的状态。
根据文档,如果您为视图提供ID(如EditText,TextView等小部件),android将自动保存其状态。
例如,EditText小部件保存用户输入的任何文本,CheckBox小部件保存是否已选中。您需要的唯一工作是为要保存其状态的每个窗口小部件提供唯一的ID(带有android:id属性)。如果窗口小部件没有ID,则系统无法保存其状态。
我为每个需要保存状态的视图都有一个唯一的ID。我还尝试在XML中明确使用android:saveEnabled="true"
,textView.setSaveEnabled(true);
无效。
我已尝试实施onSaveInstanceState
和onRestoreInstanceState
并首先调用super
。按预期调用onSaveInstanceState
,但永远不会调用onRestoreInstanceState
。此外,传递给savedInstanceState
的{{1}}始终为onCreate
。
在清单中,我尝试了null
和android:alwaysRetainTaskState="true"
但没有运气。
我可以发布代码,但我不确定哪些代码是相关的,因为系统似乎没有做它应该做的事情。什么可能会导致视图的状态不被android自动保存?任何帮助表示赞赏,如果需要,我可以发布特定代码。
旁注:如果它有任何不同,我正在使用AppCompat。
答案 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实例。