使用正确的片段和状态恢复活动

时间:2017-02-08 18:09:14

标签: android performance android-fragments android-intent android-activity

我有一个带有主菜单的应用程序,点击它后,导航到不同的活动。

其中一项活动是搜索,我用多个片段更新容器。它是一种搜索,有3个步骤。 (步骤1,步骤2,步骤3)

当我进行其他活动并返回搜索活动时,状态将丢失。

什么是使用正确片段恢复活动的最佳方法?

我尝试过 android:launchMode =“singleInstance”以及 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT或Intent.FLAG_ACTIVITY_CLEAR_TOP)来强制执行一个活动实例工作,但是第一次打开活动需要时间(应用程序停止工作,然后重新开始)

我想我不能只使用savedInstanceState(),因为每个片段需要在前一个片段中选择一些信息

有什么建议吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">

    <!--Top bar Menu-->
    <include  layout="@layout/partials_top_bar"/>


    <FrameLayout
        android:windowSoftInputMode="adjustNothing"
        android:id="@+id/container"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </FrameLayout>


    <!--Bottom Bar Menu-->
    <include  layout="@layout/partials_bottom_bar"/>

</LinearLayout>

当用户选择某个动作时,我会用

更新实际的片段
        activity.supportFragmentManager
                .beginTransaction()
                .replace(R.id.container, fragment)
                .addToBackStack(null)
                .commit()

编辑:找到解决方案。当我打开SingleInstance时,“延迟”/应用冻结显示是由删除所有活动的过渡动画引起的。但只有单实例活动才会出现这种延迟。所以我要用它。非常感谢你们。

1 个答案:

答案 0 :(得分:0)

您可以在活动中创建一个静态变量“state”,可以是String,当您更改Fragment时,您可以更改de变量值,例如,当您更改为StepOneFragment时,将值放入 “step_one”,StepTwoFragment - &gt; “step_two”,StepThreeFragment - &gt; “step_three”,如果你回来,你根据你所在的片段改变变量值,然后在onAreate of SearchActivity中,你在该变量中进行切换,并根据值加载所需的片段。

希望有所帮助