【问题标题】:Android addToBackStack() with more than 2 fragments具有超过 2 个片段的 Android addToBackStack()
【发布时间】:2013-06-12 01:05:45
【问题描述】:

我有一个非常奇怪的错误,我无法弄清楚。

我有 1 个主要片段和许多次要片段。 A->(B,C,D,E,F) 其中 Fragment A 应始终堆叠在 backstack 上,但 Fragment B,C,D,E 应进出变化。

我使用这些代码行来做到这一点:

    getFragmentManager().executePendingTransactions();
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    MyFragment mListFragment = new MyFragment();
    transaction.replace(R.id.listFragmentPlaceHold, mListFragment, FRAGMENT_TAG);
    if(getFragmentManager().getBackStackEntryCount() == 0)
            transaction.addToBackStack(null);
    transaction.commit();

问题是这样的,如果我从片段 A 转到片段 B 并且回击按钮一切正常。我可以随意多次这样做。

然后,当我去 A->B 然后切换 B 几次,A->(B,C,D) 并回击,我仍然很好,我回到 A。但是,当我有完成了上述操作,然后我尝试再做一次。我再次从 A -> B (不重新启动活动)然后将 B 切换到 C、D 然后回击,片段 A 不再存在并且我得到空指针异常。

谁能帮帮我,这让我发疯了。

在尝试引用片段 A 之前,我总是使用 getFragmentManager().executePendingTransactions();。

谢谢!

【问题讨论】:

  • 问题可能与this 类似,但他们的解决方案没有帮助。

标签: android android-fragments


【解决方案1】:

所以在阅读this 和this 帖子后,我意识到replace() 调用remove() 应该调用片段的onDestroy() 方法,在我的情况下片段A 与视图关联,因此如果我称为replace(),不能保证片段 A 仍然存在并且不会被重新创建。所以我改用detach()来解决问题。

我的理解可能有误……但这确实解决了问题:

getFragmentManager().executePendingTransactions();
MyFragment1 mListFragment1 = 
           (MyFragment1) getFragmentManager().findFragmentByTag(MY_FRAG1);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
MyFragment mListFragment = new MyFragment();
transaction.replace(R.id.listFragmentPlaceHold, mListFragment, FRAGMENT_TAG);
if(getFragmentManager().getBackStackEntryCount() == 0){
      transaction.detach(mListFragment1);
      transaction.add(R.id.listFragmentPlaceHold, mListFragment, FRAGMENT_TAG);
      transaction.addToBackStack(null);
}else{
      transaction.replace(R.id.listFragmentPlaceHold, mListFragment, FRAGMENT_TAG);
}
transaction.commit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多