Android:导航到父活动会重新创建父活动

时间:2014-01-14 01:36:49

标签: android android-intent android-fragments

我有一个具有子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(真);

2 个答案:

答案 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中恢复。