【问题标题】:Replace fragment using FragmentTransaction calls fragment create multiple times使用 FragmentTransaction 多次调用片段创建替换片段
【发布时间】:2014-09-19 10:01:44
【问题描述】:

这是我的代码

public void changeFragment(Fragment contentFragment, Fragment lastFragment, int resourseID,int animationType, boolean addToStack) {
if (contentFragment != lastFragment) {

   mContentFragmentTransaction = getFragmentManager().beginTransaction();
   FragmentTransactionExtended fragmentTransactionExtended = new FragmentTransactionExtended(this, mContentFragmentTransaction,lastFragment,contentFragment, resourseID);
   fragmentTransactionExtended.addTransition(animationType);
   mContentFragmentTransaction.replace(resourseID, contentFragment);
   if (addToStack) {
       mContentFragmentTransaction.addToBackStack(null);
   }
   mContentFragmentTransaction.commit();
   }

}

问题是,每次我使用这种方法更改Fragment,片段的oncreate都会触发多次,第一次运行一次,第二次运行两次,第三次运行三次,希望有人知道这里发生了什么。

【问题讨论】:

    标签: android android-fragments fragmentmanager


    【解决方案1】:

    addToBackstack 创建片段状态的快照。这意味着当您按下返回按钮时,您实际上是恢复到调用 addToBackstack 的最后一个状态。

    您必须在包含片段的 容器 上调用替换,而不是片段本身。因此,与其调用replace(R.id.dashboard, fragment),不如调用replace(R.id.dashboards_container, fragment)

    您是否尝试过使用其他方法,例如 remove(),然后执行 add()。或类似的东西?有人说的 replace() 方法并不总是正确的。 如果活动的状态已经被保存,那么调用 commit 就不再安全了。您必须改为致电 commitAllowingStateLoss()。 即使您使用替换或删除呼叫,您也不能这样做。我发现的唯一解决方法是创建一个片段的新实例并每次都添加它。删除或替换片段后,最好删除对它的所有引用,以便 GC 处理它。

    问候maven

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多