我可以阻止从代码中调用Fragment的构造函数吗?

时间:2017-05-16 10:12:48

标签: java android android-fragments

在我的Fragment我有一个静态newInstance方法,它接受一些参数,将它们放在Bundle中,使用此Fragment创建新的Bundle

public static Fragment newInstance(final CommandWithNumber command) {
    final CallsFragment fragment = new CallsFragment();
    final Bundle args = new Bundle();
    args.putSerializable(SHOW_DETAILS_COMMAND, command);
    fragment.setArguments(args);
    return fragment;
}

有没有办法阻止在代码中的其他位置调用new CallsFragment()强制开发人员使用newInstance方法?

当然,我不能私有CallsFragment因为操作系统需要公开操作。如果有人试图用构造函数创建一个实例,也许有办法显示警告?

1 个答案:

答案 0 :(得分:5)

你应该 NOT 使用Fragment的构造函数,系统使用它来恢复配置更改。 必须有一个在Fragment类中不带参数的公共构造函数

  

Fragment的所有子类都必须包含公共无参数构造函数。框架通常会在需要时重新实例化一个片段类,特别是在状态恢复期间,并且需要能够找到此构造函数来实例化它。如果无参数构造函数不可用,则在状态恢复期间的某些情况下将发生运行时异常。

来自Documentation

编辑: 在评论部分进一步讨论并了解您要执行的操作后,您应该添加@Deprecated注释,并使用javadocs说明您的原因不应该在内部使用这个构造函数,如下所示:

/**
* this should <b>NEVER</b> be used, always use the newInstance method instead
**/
@Deprecated
public CallsFragment() {
  // EMPTY METHOD
}