Android TabListener:onTabSelected - 将片段添加到后台堆栈

时间:2013-02-23 17:01:17

标签: java android android-fragments android-tabs

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

每次选择标签时,我都想将其添加到后台。我怎样才能做到这一点?将参数ftft.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.

2 个答案:

答案 0 :(得分:3)

您在问题中链接到的ActionBar guide有关于后台堆栈的说法(在标签监听器示例代码下面的“警告”部分):

  

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

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

答案 1 :(得分:0)

在onTabChanged回调中创建自己的FragmentTrasaction,并尝试commit(); 请查看以下链接。

FragmentTransaction is not allowed to be added to back stack?