Android 使用replace时不调用onPause或onStop的片段

Android 使用replace时不调用onPause或onStop的片段,android,android-fragments,back-stack,fragmentmanager,Android,Android Fragments,Back Stack,Fragmentmanager,我有一个奇怪的问题,当我用另一个片段替换它时,我的片段没有调用任何生命周期结束方法,比如onPause和onStop。 我这样替换碎片 public static void replaceFragment(Activity activity, int layoutId, Fragment fragment, String title, String shortTitle) { FragmentTransaction transaction = activity.getFragmentMa

我有一个奇怪的问题,当我用另一个片段替换它时,我的片段没有调用任何生命周期结束方法,比如onPause和onStop。 我这样替换碎片

public static void replaceFragment(Activity activity, int layoutId, Fragment fragment, String title, String shortTitle) {
    FragmentTransaction transaction = activity.getFragmentManager().beginTransaction().replace(layoutId, fragment);
    transaction.addToBackStack(title);
    transaction.setBreadCrumbTitle(title);
    transaction.setBreadCrumbShortTitle(shortTitle);
    transaction.commit();
    activity.getFragmentManager().executePendingTransactions();     
}

我认为这是在某种程度上保持了我的片段的活力,即使我在替换相同的片段后再次弹出backstack,因为在它之前已经显示了一个片段,那么它也会在启动之前调用onStop

使用抽象类中的精确代码,我无法复制此问题。我创建了一个抽象类,
ReplaceFragment

My
Main
类扩展了
FragmentActivity
并为片段设置内容视图

在Fragment类中,我设置了一个
列表视图
。单击列表项时,我将执行以下操作:

      getListView().setItemChecked(index, true);

      // Check what fragment is currently shown, replace if needed.
      DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details);
      if (details == null || details.getShownIndex() != index) {
        details = DetailsFragment.newInstance(index);
        
        ReplaceFragment.replaceFragment(...);
      }
每次单击时,我在LogCat中的输出为:

10-07 12:19:07.688:V/FragmentManager(861):删除:details片段{40527d48#1id=0x7f040003}嵌套=2

10-07 12:19:07.688:V/FragmentManager(861):继续移动:DetailsFragment{40527d48#1id=0x7f040003}

10-07 12:19:07.688:E/DetailsFragment(861):暂停时的详细信息()

10-07 12:19:07.688:V/FragmentManager(861):movefrom开始:DetailsFragment{40527d48#1id=0x7f040003}

10-07 12:19:07.688:E/Details片段(861):顶部细节()

10-07 12:19:07.699:V/FragmentManager(861):movefrom已停止:details片段{40527d48#1id=0x7f040003}

发布实现的更多详细信息,以便进一步帮助您。

我解决了问题:)

这是因为我在平板电脑上的应用程序在一个主片段中添加了两个片段,然后当我替换包含另外两个片段的片段时,他们的暂停和暂停不被称为暂停,所以通过在主片段顶部调用他们的暂停,我解决了这个问题


感谢大家的帮助,我不知道我使用的方法真的不是问题所在,但是孩子的碎片不会和他们的父母一起销毁

在你的代码中,你在哪里调用这个方法?它在一个抽象类中。你能给我们展示一下你的一个受影响片段的代码吗?它是否在onPause()上有@Override指令?使用FragmentManager启用日志记录。enableDebugLogging(true);然后看看这是否显示了有用的东西——您是否有可能覆盖了生命周期方法(无论是在
活动中
还是
片段
类中),而忘记了将调用委托给
超级
?您的问题中的代码片段没有问题,因此问题可能在宿主
活动
或您的
片段
类中的某个地方。如果没有更多的细节,恐怕无法进一步确定确切的问题。我的应用程序中只有一个活动,因此我使用此方法替换容器(framelayout)中的片段。在调用Activitys onPause或onStop时,将调用片段的onPause和onStop。但在我替换它的时候不是。发布额外的源代码,我很乐意测试您的确切用例。这是一个扩展片段的普通类。尝试删除extends FragmentActivity和extends ReplacementFragment,您就拥有了我所拥有的。我没有实现它,它是一个抽象类,方法是静态的,所以我只调用ClassName.replaceFragment(…);