我正在设计一个供其他开发人员使用的 fragment 。 fragment 必须有一个 Android SDK 在创建 fragment 时使用的公共(public)构造函数,但要将数据从 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;
}
我的问题是有没有办法确保开发人员必须使用此方法而不是公共(public)构造函数?
最佳答案
检查 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.");
}
}
关于java - 如何确保 fragment 是通过静态方法 new Instance 在 Activity 中创建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288308/