2

我在我的 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);
    }
}

每次选择选项卡时,我都想将其添加到后台堆栈。我怎样才能做到这一点?使用参数ftwith 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.
4

2 回答 2

3

您在问题中链接到的ActionBar 指南有关于后台堆栈的说明(在选项卡侦听器示例代码下方的“警告”部分中):

您也不能将这些片段事务添加到后台堆栈。

该指南没有解释原因,但不支持您想要的。您必须以其他方式保留标签历史记录,或者根本不保留标签历史记录。

于 2013-02-23T20:58:42.633 回答
0

在 onTabChanged 回调中创建您自己的 FragmentTrasaction,然后尝试 commit(); 检查以下链接。

不允许将 FragmentTransaction 添加到后台堆栈?

于 2014-03-11T17:22:56.017 回答