8

我有一个奇怪的问题,当我用另一个片段替换它时,我的片段没有调用任何结束生命周期方法,如 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();     
}

我认为它以某种方式使我的片段保持活动状态,即使我 popBackStack 导致在它之前显示的片段之后再次替换相同的片段之后它还会在 onStart 之前调用 onStop?

4

2 回答 2

6

我解决了这个问题:)

这是因为我在平板电脑上的应用程序在一个主要片段中添加了两个片段,然后当我替换包含其他两个片段的片段时,他们的 onPause 和 onStop 没有被调用,所以通过在主片段 onStop 中调用他们的 onStop 我已经解决了这个问题。

感谢所有人的帮助,我不知道我使用的方法真的不是问题,但是子片段不会被他们的父母破坏!

于 2013-10-14T16:47:54.177 回答
2

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

我的Main课程扩展FragmentActivity并设置了片段的内容视图。

在 Fragment 类中,我设置了一个ListView. 单击列表项时,我正在执行以下操作:

      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): 删除: DetailsFragment{40527d48 #1 id=0x7f040003} 嵌套=2

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

10-07 12:19:07.688:E/DetailsFragment(861):详细信息 onPause()

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

10-07 12:19:07.688:E/DetailsFragment(861):详细信息 onStop()

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

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

于 2013-10-07T12:30:41.707 回答