为什么Fragment通过工厂方法实例化?

时间:2014-02-17 17:51:05

标签: java android android-fragments

正如每个Android开发人员所知,每次创建自定义Fragment时,您都不会使用它的构造函数,正如文档所述。所以这样做的方式更像是:

public static BlankFragment newInstance(String param1, String param2) {
    BlankFragment fragment = new BlankFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}
public BlankFragment() {
    // Required empty public constructor
}

通过工厂方法实例化Fragment是否有任何特殊原因?

1 个答案:

答案 0 :(得分:1)

通过这种方式,您可以将所有初始化代码保存在一个位置,片段通常用于许多活动中,因此这种工厂方法可确保您不会错过任何新添加的参数。

实际上你可以在你的片段中添加构造函数,并将newInstance代码移动到它。问题是android在片段重新创建时不会使用它,所以这样的构造函数可能会混淆一些编码器。

另一方面,如果你想创建参数较少的newInstance()工厂方法,它会使用带有一些init值的setArguments,那么你就无法将它改为构造函数版本,因为android会在片段期间调用你的参数而不是构造函数娱乐。

你可以在这里阅读更多内容:

http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html