我有一个具有子PersonActivity的SearchAcvitity。每个都是FragmentActivity的。这是我的清单文件:
<activity android:name=".SearchActivity" android:label="@string/search_title">
</activity>
<activity android:name=".PersonActivity" android:label="@string/person_title"
android:parentActivityName=".SearchActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".SearchActivity" />
</activity>
从SearchFragment中,我像这样开始PersonActivity:
Intent i = new Intent(getActivity(), PersonActivity.class);
startActivity(i);
仅此一项就会在PersonFragment中将面向左侧的插入符号与app图标一起添加。当我按下此图标时,它会重新创建SearchAcvitiy(和片段),因此其先前的状态将丢失。
当我按下PersonFragment中的后退按钮时,它会通过onResume(...)返回SearchActivity的SearchFragment,其状态完好无损。如何通过up动作实现这一目标?
请注意,我不会在PersonFragment中进行此调用:
getActivity()getActionBar()setDisplayHomeAsUpEnabled(真);
答案 0 :(得分:15)
向上导航使用Intent.FLAG_ACTIVITY_CLEAR_TOP
启动父活动。此标志的标准行为是完成位于任务堆栈中的父活动之上的所有活动,包括父活动本身,然后启动父活动**的新实例。如果要恢复父Activity的现有实例,则可以在父Activity的清单中设置以下内容:
android:launchMode="singleTop"
当CLEAR_TOP和SINGLE_TOP一起使用时,这将恢复父Activity的现有实例。在这种情况下,不会在已恢复的父级活动上调用onCreate()
,而是会调用onNewIntent()
。
答案 1 :(得分:0)
我认为之前有人可能会问过这个问题:onCreate being called on Activity A in up navigation
基本上是预期的行为。您需要将状态保存到捆绑包中,您可以在onCreate中恢复。