首页 > 解决方案 > 如何确保从静态方法 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;
    }

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

标签: javaandroidandroid-fragmentssoftware-design

解决方案


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

推荐阅读