【问题标题】: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