【问题标题】:Android TabListener: onTabSelected - add fragment to back stackAndroid TabListener:onTabSelected - 将片段添加到后台堆栈
【发布时间】:2014-03-12 01:22:56
【问题描述】:

我在我的 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.

【问题讨论】:

  • 它是addToBackStack(String name),您应该将片段类的名称传递给它。
  • 我不明白你的评论,对不起。如何在onTabSelectedcallback 中执行addToBackStack?

标签: java android android-fragments android-tabs


【解决方案1】:

您在问题中链接到的ActionBar guide 对后台堆栈有这样的说法(在选项卡侦听器示例代码下方的“警告”部分中):

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

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

【讨论】:

  • 哦,这个页面我看了10多遍了,但是这个我没看到。好吧,我不得不以其他方式解决它。谢谢。
【解决方案2】:

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

FragmentTransaction is not allowed to be added to back stack?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多