为什么在以下情况下,FragmentTwo
会从backbackback中消失:
我的应用程序在Fragment
中有一个名为FragmentOne
的Activity
。FragmentOne
保持aButton
。单击后,将启动FragmentTwo
,并将其添加到Fragment
backbackback中。FragmentTwo
有一个Button
,单击它会将两个选项卡添加到链接到两个ActionBar
、Fragments
和FragmentThree
的FragmentFour
中。FragmentThree
可见。
如果我现在单击back按钮,我希望看到FragmentTwo
。相反,我看到了FragmentOne
。去哪儿了?
在覆盖FragmentTwo
并开始为onKeyDown()
实现自己的backback之前,我想问是否有明显的遗漏?注意,测试时没有发生配置更改。
细节:
FragmentOne的按钮单击处理程序包含:
FragmentTransaction ft = getFragmentManager().beginTransaction();
FragmentTwo fragment = new FragmentTwo();
ft.addToBackStack(null);
ft.replace(android.R.id.content, fragment).commit();
活动中处理碎片两个按钮的单击:
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);
其中,选项卡侦听器是:
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) {
}
}
如果在显示
Fragments
之前向backback添加更多Fragments
,则始终且仅在FragmentThree
之前的Fragment
消失。当我按back键离开选项卡式用户视图并返回
FragmentThree
时,选项卡仍在显示。我知道我需要将FragmentOne
重置为ActionBar
,但不清楚为什么显示NAVIGATION_MODE_STANDARD
而不是FragmentOne
。 最佳答案
我想问题是如果你建立你的标签
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(android.R.id.content, fragment);
}
调用,并且之前的片段不会添加到backbackback中。
你有打电话给我吗
ft.addToBackStack(null);
在片段中两个按钮处理代码。
但无论如何,您都需要实现
onBackPressed()
来摆脱标签页。我想我会用标签做新的活动。