美文网首页Android FragmentAndroid知识
为什么使用Fragment Arguments,而非构造函数

为什么使用Fragment Arguments,而非构造函数

作者: CPPAlien | 来源:发表于2016-02-19 14:33 被阅读753次

下面先分别对构造行数方法(方法一)和argument静态工厂方法(方法二)举个样例代码。
方法一:

String content;
public SecondFragment(String content) {
    this.content = content;
}

方法二:

public static SecondFragment newInstance(String content) {
    Bundle args = new Bundle();
    args.putString("content", content);
    SecondFragment fragment = new SecondFragment();
    fragment.setArguments(args);
    return fragment;
}

往往我们在做Activity向Fragment传递参数时会用方法二,而不会用方法一。这里有以下几个原因,最主要的原因是当系统重建fragment时,所有在类中声明的变量都会丢失。所以如果你使用方法一,当遇到用户改变系统配置或你的app后台后被系统回收而导致fragment重建,则content内容丢失。而在使用argument方法时,则内容不会丢失,在fragment重建后,通过getArguments可以找回。

当然也有童鞋说我可以使用onSaveInstanceState的方法来在fragment被重建前先保存内容,然后在onCreate(Bundle)时重新赋值。这个方法也是可行的。但这种方法既不容易控制而且也增加了复杂性,比如以后你想多增加一个参数,还需要记得在onSaveInstanceState方法中添加一条。

咱们之所以使用第二种方法,还有另外一些原因,一方面它维持了fragment的封装性,因为静态方法不包含指向外围类的引用。另一方面根据《Effective Java》第二版中第一条所说:考虑用静态方法代替构造器有诸多好处。

  1. 它们有名称
  2. 不必在每次调用时创建一个新对象
  3. 可以返回原类型的任何子类型的对象
  4. 在创建参数化类型实例的时候,它们使得代码变得更加简洁

更多具体内容请参考《Effective java》

注:没有任何方法阻止内存不足时被系统回收

相关文章

  • 为什么使用Fragment Arguments,而非构造函数

    下面先分别对构造行数方法(方法一)和argument静态工厂方法(方法二)举个样例代码。方法一: 方法二: 往往我...

  • 箭头函数和普通函数的区别

    箭头函数是匿名函数,不能作为构造函数,不能使用new 箭头函数不能绑定arguments,取而代之用rest参数....

  • es6

    箭头函数与普通函数的区别 箭头函数是匿名函数,不能作为构造函数,不能使用new 箭头函数不绑定arguments,...

  • ES6箭头函数与普通函数区别

    箭头函数作为匿名函数,是不能作为构造函数的,不能使用new 箭头函数没有原型属性 箭头函数不绑定arguments...

  • 普通函数和箭头函数的区别

    1.箭头函数是匿名函数,不能作为构造函数,不能使用new 2.箭头函数不绑定arguments(实参),取而代之用...

  • Android中的注解理解

    一、@SuppressLint用法 在使用Fragment时,当需要创建一个带有构造函数的Fragment,一般情...

  • Fragment

    生命周期 使用Fragment时,必要构建一个无参构造函数,系统会默认带。但一但写有参构造函数,就必要构建无参构造...

  • 20161105第一行代码第四章Fragment

    第四章Fragment 一、Fragment使用方式 1、Fragment简单构造三步法 简单Fragment构造...

  • fragment 构造函数

    https://blog.csdn.net/anobodykey/article/details/22503413

  • 为什么fragment不能用构造函数传参数

    fragment的构造函数是空的 instantiate方法中创建了fragment对象 instantiate ...

网友评论

本文标题:为什么使用Fragment Arguments,而非构造函数

本文链接:https://www.haomeiwen.com/subject/klcvkttx.html