如何确保片段是在 activity 中从静态方法 new Instance 创建的

How to make sure that fragment is created in the activity from static method new Instance

我正在设计一个供其他开发人员使用的片段。 片段必须具有 android SDK 在创建片段时使用的 public 构造函数,但要将数据从 activity 传递到片段,最好创建一个在片段中创建片段的静态方法class 像这样

  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 annotation:

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.");
    }
}