为什么在以下情况下
FragmentTwo
会从返回栈中消失:
- 我的应用程序有一个名为
FragmentOne
的Fragment
在一个Activity
中。 FragmentOne
包含一个Button
。点击时,它会启动FragmentTwo
,将其添加到Fragment
返回栈中。FragmentTwo
有一个Button
,点击时会向与两个Fragments
相关联的ActionBar
添加两个选项卡,FragmentThree
和FragmentFour
。FragmentThree
是可见的。- 如果我现在点击返回按钮,我希望看到
FragmentTwo
。 相反,我看到了FragmentOne
。那么FragmentTwo
去哪了?
在我覆盖onKeyDown()
并开始为Fragments
实现自己的返回栈之前,我想问一下是否有什么明显的遗漏?请注意,在测试时没有发生配置更改。
细节:
FragmentOne的按钮单击处理程序包含:
FragmentTransaction ft = getFragmentManager().beginTransaction();
FragmentTwo fragment = new FragmentTwo();
ft.addToBackStack(null);
ft.replace(android.R.id.content, fragment).commit();
在 Activity 中处理 FragmentTwo 按钮的点击事件:
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
FragmentFour fragmentThree = new FragmentThree();
FragmentFive fragmentFive = new FragmentFive();
ActionBar.Tab tab = getActionBar().newTab().setText("Frag 3").setTabListener(new CustomTabListener<FragmentThree>(fragmentThree));
getActionBar().addTab(tab);
tab = getActionBar().newTab().setText("Frag 4").setTabListener(new CustomTabListener<FragmentFour>(fragmentFour));
getActionBar().addTab(tab);
tab监听器的位置:
public static class CustomTabListener<T extends Fragment> implements TabListener {
Fragment fragment;
public CustomTabListener(Fragment fragment) {
this.fragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(android.R.id.content, fragment);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
如果在显示FragmentThree
之前向后堆栈中添加更多Fragments
,那么消失的总是并且只有FragmentThree
之前的Fragment
。
当我通过按返回键离开选项卡用户视图并返回FragmentOne
时,选项卡仍然显示。我明白我需要将ActionBar
重置为NAVIGATION_MODE_STANDARD
,但不清楚为什么会显示FragmentOne
而不是FragmentTwo
。