我的应用程序有以下流程:
关键是,我们有一个Activity
和一个滑动菜单,用户可以从中选择一个顶级片段(顶级我的意思是当用户按下Back键时,应用程序退出)。
从这些片段中,用户可以导航到另一个片段(例如论坛主题 - >主题详细信息 - >海报个人资料 - >海报的朋友 - >朋友的个人资料),其中返回键有望返回用户到前一个片段的保存状态(例如恢复滚动位置等)。
在这种情况下,我使用:
void addFragment(Fragment f) {
//add fragment in a transaction, so back key does its thing
getSupportFragmentManager().beginTransaction().addToBackStack(null)
.add(R.id.fragment_container, f).commit();
}
如果用户在任何这些片段中打开侧边菜单并选择另一个顶级片段,那么整个后面的堆栈将被新片段替换(当用户按下时,app退出)
在这种情况下,我使用:
void replaceFragment(Fragment f) {
//remove all fragments and add a top-level one
getSupportFragmentManager().popBackStackImmediate(null,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, f).commit();
}
这被认为是一个很好的导航?在iOS应用程序中,每个顶级片段都会记住它自己的后台堆栈,但这看起来像是一种矫枉过正,所以在顶层交换机上销毁后台就足够了。
答案 0 :(得分:0)
使用
private final static String TAG_FRAGMENT = "TAG_FRAGMENT";
并且
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, new Frag_Yourfrag(), TAG_FRAGMENT );
ft.addToBackStack(null);
ft.commit();
享受:)