【问题标题】:Android: navigating up to the parent activity recreates the parent activityAndroid:导航到父活动重新创建父活动
【发布时间】:2014-01-14 01:36:48
【问题描述】:

我有一个 SearchAcvitity,它有一个子 PersonActivity。每个都是 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 中的应用程序图标旁边添加了左侧插入符号。当我按下这个图标时,它会重新创建 SearchAcvitiy(和片段),因此它之前的状态会丢失。

当我从 PersonFragment 按下返回按钮时,它会通过 onResume(...) 返回到 SearchActivity 的 SearchFragment,并且它的状态是完整的。如何通过 up 操作实现这一点?

请注意,我不会在 PersonFragment 中进行此调用:

getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);

【问题讨论】:

    标签: android android-intent android-fragments


    【解决方案1】:

    向上导航使用Intent.FLAG_ACTIVITY_CLEAR_TOP 启动父活动。此标志的标准行为是完成任务堆栈中父 Activity 顶部的所有 Activity包括父 Activity 本身,然后启动父 Activity 的新实例**。如果你想恢复父Activity的现有实例,那么你可以在manifest中为父Activity设置如下:

    android:launchMode="singleTop"
    

    当 CLEAR_TOP 和 SINGLE_TOP 一起使用时,这将恢复父 Activity 的现有实例。在这种情况下,onCreate() 不会在恢复的父 Activity 上被调用,而是会被调用 onNewIntent()

    【讨论】:

      【解决方案2】:

      我想之前可能有人问过这个问题:onCreate being called on Activity A in up navigation

      基本上这是预期的行为。您需要将状态保存到包中,您可以在 onCreate 中恢复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        • 2018-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多