Fragment构造函数打包时的踩坑:should provide a default constructor
来源:互联网 发布:tensorflow keyGRaph 编辑:程序博客网 时间:2024/05/22 12:03
今晚项目上线完成后,准备打个release的线上apk包,结果令人尴尬的事情出现了,丫的居然编译失败了,debug包一直编译正常啊。android studio报错:This fragment should provide a default constructor (a public constructor with no arguments),修改后又报新错误:Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead [ValidFragment]。下面就来具体说一下Fragment打包时报的这两个错误原因以及解决方案。
报错1: This fragment should provide a default constructor (a public constructor with no arguments)
在打包时出现在这个问题,原因是一定要有一个无参的默认构造函数,如果不写任何构造函数,其实会默认初始化一个无参的构造函数,这时其实是不会报错的。但是一旦写了带参数的构造方法而没有重写无参的构造函数,这时就要打包编译时提示上边的警告了。
贴下我当时的一个错误或者不合理写法:
public class MyFragment extends BaseFragment{ public MyFragment(Context context) { mContext = context; } public static MyFragment newInstance(Context context) { return new MyFragment (context); }}
为了不让报这个错,还是按照官方建议写一个无参的构造函数,如下:
public class MyFragment extends BaseFragment{ public MyFragment() { } public static MyFragment newInstance(Context context) { mContext = context; return new MyFragment (); }}
其实也可以直接把无参的构造函数去掉,系统会默认创建的。
报错2:
Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead [ValidFragment]
在打包时出现这个问题,在类上加一个注解@SuppressLint(“ValidFragment”)可以达到不报错的目的,但是为避免Fragment中的非默认构造函数,官方还是建议使用默认构造函数加上Fragment#setArguments(Bundle)代替[ValidFragment]。
所以需要修改为如下的形式:
public class MyFragment extends BaseFragment{ public MyFragment() { mContext = getActivity(); } public static MyFragment newInstance(String tag) { MyFragment myFragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString("tag",tag); myFragment.setArguments(bundle); return myFragment; }}
按照上边的建议来修改Fragment的构造函数和静态工厂方法newInstance()来获取实例就可以避免在正式打包时报上边的两个错误了。
其实,还有一种方法也能达到不报错的目的,就是直接在 build.gradle
配置文件中的android{ ··· }节点内添加配置禁止在正式打包时检测这个错误就可以了,添加格式如下:
android { ··· ··· buildTypes { release { ··· ··· } debug { ··· ··· } } lintOptions { abortOnError false checkReleaseBuilds false }}
但是个人建议,应该尽量还是按照Google官方的建议解决方案来处理会比较好些。当然也可以视具体情况而定。
本人理解能力有限,如果有哪里讲的不够合理或者不够透彻,欢迎留言指出和交流。
- Fragment构造函数打包时的踩坑:should provide a default constructor
- Android中Fragment的构造函数 his fragment should provide a default constructor
- Error:Error: This fragment should provide a default constructor (a public constructor打包apk错误
- Error: This fragment should provide a default constructor
- This fragment should provide a default constructor (a public constructor with no arguments
- Error: This class should provide a default constructor (a public constructor with no arguments)
- default constructor 的构造函数
- 继承Fragment后,重写构造函数就报:Avoid non-default constructors in fragments: use a default constructor plus Fra
- 构造函数的寓意:default constructor
- default constructor(默认构造函数)
- 构造函数语义学---default constructor
- 默认构造函数(Default constructor)的构造操作
- Avoid non-default constructors in fragments: use a default constructor plus Fragment报错的解决方法
- Avoid non-default constructors in fragments: use a default constructor plus Fragment报错的解决方法
- Avoid non-default constructors in fragments: use a default constructor plus Fragment报错的解决方法
- [C++]default constructor默认构造函数
- 2.1 Default Constructor的构造操作
- 深度搜索C++对象模型2.2 构造函数语义学-Default Constructor的构造操作
- 基于Hibernate实践对ORM模式的一点思考
- 在eclipse中在线安装windowBuilder
- cocos2dx3.15接入微信SDK实现登录和分享android studio2.3.3
- struts中数据处理的几种方式
- 状态机引擎选型
- Fragment构造函数打包时的踩坑:should provide a default constructor
- 打印html并去掉页眉页脚
- java 中序列化的作用和好处
- MySQL 权限管理简单篇
- 大话设计模式——简单工厂模式
- AWS 连接超时分析(AWS-route53 + nginx + tomcat)
- Soot实践(一):利用Soot来获取Android的组件列表
- 99行Swift编写人工智能图片识别服务器
- 蚁人