我在我的Android应用程序中使用TabListener
类似于这个:http://developer.android.com/guide/topics/ui/actionbar.html#Tabs
我的onTabSelected
实施:
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Fragment preInitFrag = mActivity.getFragmentManager().findFragmentByTag(mTag);
if (preInitFrag == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(preInitFrag);
}
}
每次选择标签时,我都想将其添加到后台。我怎样才能做到这一点?将参数ft
与ft.addToBackStack("test")
一起使用,它不起作用。它抛出致命的例外:
java.lang.RuntimeException:
Unable to start activity ComponentInfo{.../...BaseActivity}:
java.lang.IllegalStateException:
This FragmentTransaction is not allowed to be added to the back stack.
答案 0 :(得分:3)
您在问题中链接到的ActionBar guide有关于后台堆栈的说法(在标签监听器示例代码下面的“警告”部分):
您也无法将这些片段事务添加到后台堆栈。
指南不解释原因,但不支持您想要的内容。您必须以其他方式保留标记历史记录,或者根本不保留标记历史记录。
答案 1 :(得分:0)
在onTabChanged回调中创建自己的FragmentTrasaction,并尝试commit(); 请查看以下链接。
FragmentTransaction is not allowed to be added to back stack?