关闭

Fragmnet为何一定需要空的构造方法

229人阅读 评论(0) 收藏 举报
分类:

写项目的时候如果需要对碎片的构造方法传入参数(即创建一个有参的构造方法),此时会飘红

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead...

大概意思就是避免创建有参的构造方法,推荐使用无参的构造方法,那么这是为什么呢?
在网上查了下,发现是在程序因为系统内存不足而被kill的时候(不是真意义上的结束程序),当重新回到这个页面的时候,系统就会利用反射来重新构建一个新的fragment:

public static Fragment instantiate(Context context, String fname, Bundle args)

而此时会有以下两种情况:

InstantiationException,如果类没有empty constructor,该异常就会抛出。
IllegalAccessException,如果类没有publicempty constructor,该异常就会抛出。

当然以上思路都是来自网上的思路,不过我的想法是,退一万步讲就算不抛出这两个异常,利用反射的时候参数中可以看出传入了Bundle,而并没有参数保存了你创建构造方法传的参数,所以系统会推荐你使用Bundle来传递参数。

附上参考地址

补充

那么现在有个问题,就是既然Fragmnet容易被kill,那么我使用activity总的Intent存这些数据总可以了吧,如下

   recruitId = getActivity().getIntent().getIntExtra(AppConstant.INTENT_RECRUIT_ID, 0);

这显然是可以的,但是不要忘记,Fragment的本意就是创建时,建议有自己独立的逻辑,视图,这样才能在使用场景改变时,更方便直接引用(比如我现在要把Fragmnet放到Dialog中),如上的话便与Activity有了耦合性,违背初衷。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14588次
    • 积分:644
    • 等级:
    • 排名:千里之外
    • 原创:53篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论