我的Android应用正在使用FragmentTabHost并有4个标签A,B,C,D。 我在标签A中有片段A1,我导航到标签A中的第二个片段A2, 然后我切换到标签B,然后切换回标签A. 现在我点击后退按钮,它将调用popBackStack()方法,我崩溃说IllegalStateException片段A1已经添加。 你能帮我吗? 这是我用于在主标签活动
中创建标签的代码 mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("profile").setIndicator("Profile"),
ProfileFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("friends").setIndicator("Friends"),
FriendsFragmentTab.class, null);
mTabHost.addTab(
mTabHost.newTabSpec("notifications").setIndicator(
"Notifications"), NotificationFragment.class, null);
mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabID) {
mTabHost.clearFocus();
}
});
我使用此代码处理后退按钮,FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack();
答案 0 :(得分:0)
看起来一般的答案是,"制作自己的后台筹码。"它可能取决于每个选项卡上片段的内容是什么,但在我的情况下,内容本身有子片段,似乎妨碍了后栈的正常工作。
我做了一些调查,发现这篇帖子来自Android团队成员:https://stackoverflow.com/a/8888195/91165
除非您的应用程序具有复杂的导航流程,并且有很多可能的后向指示,否则直接处理导航状态而不是使用堆栈可能更容易。 (在我的情况下,堆栈只会有一个"正确"返回条目 - 从所有返回子片段转到单个主片段。水平导航不是'无论如何都添加到后面的堆栈。我认为内置的后筹码会更有效率,但在看到这个后,我不这么认为。)