如何确保从静态方法new Instance在活动中创建片段

时间:2019-10-08 14:22:33

标签: java android android-fragments software-design

我正在设计一个供其他开发人员使用的片段。 片段必须具有android SDK在创建片段时使用的公共构造函数,但要将活动中的数据传递到片段,最好创建一个静态方法来在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;
    }

我的问题是否有办法确保开发人员必须使用此方法而不是公共构造函数?

1 个答案:

答案 0 :(得分:2)

检查参数集是否在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.");
    }
}