【问题标题】:Fragment Transition with onBackPressed()使用 onBackPressed() 进行片段转换
【发布时间】:2016-05-10 02:30:02
【问题描述】:

我在做fragment transaction,backstack是这样的:

fragA => fragB => fragC => fragD

我想根据成功状态从fragD返回后返回fragA:

fragD => onBackPressed() => fragA

不从后台堆栈中删除 fragB 和 fragC

我如何使用Fragments 和Activitys 做到这一点?

【问题讨论】:

    标签: android android-fragments android-activity onbackpressed


    【解决方案1】:

    将片段添加到 backstack 时,您必须像这样指定名称:

    transaction.addToBackStack(fragment_home.getClass().getName());
    

    当从堆栈中弹出它时,您可以尝试使用片段名称或位置。

    getSupportFragmentManager().popBackStack("Name of the Fragment",
                                             FragmentManager.POP_BACK_STACK_INCLUSIVE);
    

    通过这种方式可以遍历栈中的任意片段

    你也可以在onBackPressed()里面试试。

    【讨论】:

      【解决方案2】:

      你不能用片段来做到这一点(至少据我所知不是)。

      但是要回答您问题的第二部分(如何通过活动来做到这一点)...您可以通过 SingleTask 活动实现这种影响。在 Manifest 文件中将 Activity A 设置为 singleTask,当它启动时,它不会创建新实例,而是重新打开旧实例。根据 Android 的文档,在启动 SingleTask Activity 时...

      系统在新任务的根目录创建活动并将意图路由到它。但是,如果 Activity 的实例已经存在,系统会通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建一个新实例。

      所以你只需在 Activity A 中重写 onNewIntent(),本质上,当它从 Activity D 调用时,它会被拉回栈顶,而 B 和 C 会留在它下面的栈中.

      查看此链接了解更多信息。 http://developer.android.com/guide/topics/manifest/activity-element.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多