Fragment getSupportFragmentManager、getFragmentManager、getChildFragmentManager区别
1、getSupportFragmentManager是AppCompatActivity里的方法,用于管理Activity里同级的Fragment
2、getFragmentManager是Fragment里的方法,和在Activity里调用getSupportFragmentManager得到的FragmentManager是一样的,都是用于管理Activity里同级的Fragment,在Fragment调用getFragmentManager,相当于获取Activity的FragmentManager,来管理与当前Fragment是同级的其它的Fragment。
比如Activity A,FragmentA1,FragmentA2。FragmentA1已经添加到ActivityA中,如果添加FragmentA2,并且FragmentA2属于ActivityA管理,则在ActivityA调用getSupportFragmentManager添加FragmentA2,或者在FragmentA1调用getFragmentManager添加FragmentA2,效果是一样的。如果FragmentA1已经脱离ActivityA,getFragmentManager将会得到null。
3、getChildFragmentManager用户当前Fragment管理它的子Fragment。如果在Fragment通过getChildFragmentManager,添加了一个子Fragment1,并添加到回退栈,此时getChildFragmentManager管理的回退栈内只有一个Fragment1,回退后,栈就清空了。
回退子Fragment,如果想在当前Fragment的onResume、onHiddenChanged、setUserVisibleHint,发现都得不到回调,可以通过以下方式在父的Fragment监听子Fragment的回退栈。
childFragmentManager.addOnBackStackChangedListener {
if(childFragmentManager.backStackEntryCount==0){
}
}