Fragment getFragmentManager、getSupportFragmentManager、getChildFragmentManager区别

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){
                
        }
 }

 

在 Android 开发中,如果你使用的是 Support 包(如 androidx),你可以通过调用 `getSupportFragmentManager()` 方法来获取 Fragment 的管理器。 以下是一个使用 `getSupportFragmentManager()` 方法的示例代码: ```java // 导入需要的包 import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取 FragmentManager FragmentManager fragmentManager = getSupportFragmentManager(); // 开始 FragmentTransaction FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // 添加或替换 Fragment MyFragment myFragment = new MyFragment(); fragmentTransaction.add(R.id.fragment_container, myFragment); // 将 Fragment 添加到容器中 // 或者使用 replace 方法替换一个已存在的 Fragment // fragmentTransaction.replace(R.id.fragment_container, myFragment); // 提交事务 fragmentTransaction.commit(); } } ``` 在上面的代码中,我们首先通过 `getSupportFragmentManager()` 方法获取 FragmentManager 的实例。然后,我们创建一个 FragmentTransaction 对象来开始执行 Fragment 操作,例如添加或替换 Fragment。最后,我们通过调用 `commit()` 方法提交事务。 请注意,`R.id.fragment_container` 是一个容器的 ID,它指定了在布局文件中放置 Fragment 的位置。你可以根据实际情况修改它。 希望以上信息能对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值