解决方案先放最前面:找到覆写的FragmentNavigator类中public NavDestination navigate(@NonNull FragmentNavigator.Destination destination, @Nullable Bundle args, @Nullable NavOptions navOptions, @Nullable Navigator.Extras navigatorExtras)这个方法,添加ft.setMaxLifecycle(lastFragment, Lifecycle.State.STARTED);如下面代码所示
if (mFragmentManager.getFragments().size() > 0) {
Fragment lastFragment = mFragmentManager.getFragments().get(mFragmentManager.getFragments().size() - 1);
ft.hide(lastFragment);
//添加这行,保证fragment生命周期回调
ft.setMaxLifecycle(lastFragment, Lifecycle.State.STARTED);
if (frag.isAdded()) {
ft.show(frag);
} else {
ft.add(mContainerId, frag);
}
} else {
ft.replace(mContainerId, frag);
}
// ft.replace(mContainerId, frag);
ft.setPrimaryNavigationFragment(frag);
Navigation库版本:2.3.2
有经验的开发者看见这个肯定知道这就是AndroidX下FragmentManager切换的生命周期设置方法。
最近开发的新项目使用了Navigation导航做单Activity应用,一开始被Navigation的replace切换fragment方式困扰,找到方法换成了show/hide方式,后续的开