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

Pio*_*ski 1 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

the*_*osh 5

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

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

来自文档

编辑:在评论部分进一步讨论并理解你想要做什么之后,你应该添加一个@Deprecated带有javadocs的注释,说明为什么你不应该在内部使用这个构造函数,如下所示:

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