Android28和fragment问题,Android 28之后Fragment左右为男

注意:该文档只针对于近段时间,当前最新的android版本是29

一般我们写Fragment的时候都会面临一个选择的问题:

android.support.v4.app包下的Frgament和android.app包下的Fragment,到底要用哪个。

一. 两者的不同

1. 最低支持的版本不同

android.app.Fragment最低支持的版本是11,也就是3.0,而android.support.v4.app.Fragment最低支持的版本是4,也就是1.6。

可以看出v4.app的Fragment想当是做了一个扩展的操作。

2.两者导入的jar包不同

android.support.v4.app.Fragment 需要引入包android-support-v4.jar,而android.app.Fragment 需要导入的是android-app.jar。

这个其实毫无影响,我们需要使用什么就导入相应的就行。

3. 是否可以静态

v4.app包的Fragemt可以写成静态的方式,也就是在布局中使用标签,而app包的Fragment只能在代码中动态的去创建。

但是这个影响也不大,因为一般的开发都是写动态创建的,这样会比较灵活。

4. 继承问题

这个就很重要了,在动态创建Fragment的时候需要获取FragmentManager,而这个FragmentManager。

如果是使用android.support.v4.app.Fragment的话,要在继承FragmentActivity的情况下调用getSupportFragmentManager()获取到。

如果是使用android.app.Fragment的话,要在继承Activity的情况下调用getFragmentManager()就能获取到。

因为FragmentActivity继承Activity,所以在FragmentActivity也可以调用getFragmentManager()。

二. Android 28之后的问题

在28版本之前,我们无论使用哪一个包下的Fragment都没问题,但我们一般更倾向于使用android.app.Fragment,最大的原因是因为我们习惯直接继承Activity。如果是开发SDK的话,我们只负责写内部的功能,那更要适配外部的调用方可能会继承Activity的情况,而只能使用android.app.Fragment。

那么问题又来了,在Andorid 28之后,官方推荐不要再使用android.app.Fragment,如果你在gradle将版本升到28,你会发现android.app.Fragment和android.app包下的FragmentManager、DialogFragment等等类,都被划了一条横线。

官方表态不推荐用户使用android.app下的这些类,当然不是不用使用,但是按照官方之前的大部分做法,可能性就是最近的几个版本说是不推荐使用,再过几个版本之后将会直接移除这个类。

所以就造成了现在左右为男的境地,要使用android.support.v4.app.Fragment又担心不适配直接继承Activity的情况,要使用android.app.Fragment又要担心之后版本这个包会不会被移除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值