我有一个奇怪的问题,当我用另一个片段替换它时,我的片段没有调用任何结束生命周期方法,如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?
答案 0 :(得分:4)
我解决了问题:)
这是因为我在平板电脑上的应用程序在一个主要片段中添加了两个片段,然后当我替换包含另外两个片段的片段时,他们的onPause和onStop都没有被调用,所以通过在主片段onStop上调用他们的onStop我已经解决了这个问题。
感谢所有人试图提供帮助我不知道我使用的方法确实是问题,但是那些儿童碎片并没有被他们的父母破坏!
答案 1 :(得分: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):remove:DetailsFragment {40527d48#1 id = 0x7f040003} nesting = 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}
发布有关实施的更多详细信息,以便进一步帮助您。