java - 如何确保从静态方法 new Instance 在活动中创建片段
问题描述
我正在设计一个供其他开发人员使用的片段。Fragment 必须有一个公共构造函数,android SDK 在创建 Fragment 时使用它,但是要将数据从 Activity 传递到 Fragment,最好创建一个静态方法,在 Fragment 类中创建 Fragment,如下所示
public static FaceMatchingResultFragment newInstance(boolean matched, String param2) {
FaceMatchingResultFragment fragment = new FaceMatchingResultFragment();
Bundle args = new Bundle();
args.putBoolean(ARG_PARAM1, matched);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
我的问题是有没有办法确保开发人员必须使用这种方法而不是公共构造函数?
解决方案
检查是否包含参数包是onCreate
最干净的方法,而不会弄乱反射。如果要在访问无参数构造函数时显示内联错误,可以使用RestrictTo
注释:
public class SimpleArgFragment extends Fragment {
public static SimpleArgFragment newInstance(boolean val) {
Bundle args = new Bundle();
args.putBoolean("param", val);
SimpleArgFragment f = new SimpleArgFragment();
f.setArguments(args);
return f;
}
@androidx.annotation.RestrictTo({RestrictTo.Scope.SUBCLASSES})
public SimpleArgFragment() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() == null)
throw new IllegalArgumentException("Missing arguments - use newInstance() to create.");
}
}
推荐阅读
- python - 用于fortran库的python中结构内部和外部的c_char数组之间的区别
- angular - 从 filesystemAPI 中获取图像(使用 Angular2+)
- python - 为什么 Libclang 无法获取头文件中定义的函数的定义?
- python - InvalidRequestError flask-sqlalchemy。无法制作 SQLite 表
- r - Dplyr 中的标准和非标准评估
- angular - AppComponent FormControl 似乎没有与自定义材质输入 FormControl 绑定
- javascript - Datepicker值转换为Angularjs中的字符串
- mysql - 如何修复mysql更新查询中的连接错误
- regex - 如何使用正则表达式将字符添加到值的末尾?
- docker - 我要实现什么来向 Docker 添加新操作系统?