【问题标题】:Restore activity with the right fragment and state使用正确的片段和状态恢复活动
【发布时间】:2017-02-08 18:09:13
【问题描述】:

我有一个带有主菜单的应用程序,当单击该菜单时,可以导航到不同的活动。

其中一项活动是搜索,其中包含我用许多片段更新的容器。它是一种搜索,有 3 个步骤。 (第一步、第二步、第三步)

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

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

我试过 android:launchMode="singleInstance"intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT or 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 时显示“延迟”/应用程序冻结是由删除所有活动的过渡动画引起的。但只有单实例活动会出现这种延迟。所以我要用这个。非常感谢你们。

【问题讨论】:

  • 您能否显示您在活动中添加片段的位置
  • 我包含了一些代码,有帮助吗?
  • 在OnCreate的Framelayout中添加第一个片段?您可以发布 oncreate 代码吗?
  • 是的,我添加了 onCreate 函数,代码是一样的,但我使用 .add( ) 而不是 .replace()
  • 尝试将该代码(添加第一个片段的位置)包装在 if(savedInstance == null) 中,然后尝试。

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


【解决方案1】:

您可以在您的活动中创建一个静态变量“状态”,可以是字符串,并且当您更改 Fragment 时,您会更改 de 变量值,例如,当您更改为 StepOneFragment 时,您将值设置为 “step_one”,StepTwoFragment -> “step_two”,StepThreeFragment -> “step_three”,如果你回来,你根据你所在的片段更改变量值,然后在 SearchActivity 的 onCreate 中,你在那个变量中进行切换,并根据值,加载所需的片段。

希望对你有帮助

【讨论】:

  • 我试图实现这一点,但是 onCreated (), 方法总是用 savedInstance==null 调用,当我点击再次打开相同的活动时......除非我使用 launchMode="singleInstance " ,但 onSaveInstanceState() 总是在我改变活动时被调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2023-02-10
相关资源
最近更新 更多