java - 如何确保 fragment 是通过静态方法 new Instance 在 Activity 中创建的

标签 java android android-fragments software-design

我正在设计一个供其他开发人员使用的 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/

相关文章:

java - 返回 Optional<T> 的方法的 Mockito 错误

android - 即使我插入了正确的凭据,登录 ID 也无效

java - 如何动态创建类 Java

android - 错误 : unknown tag <:string> in my app

android - 如何在 mediaplayer android 上播放 mp3+g

android - fragment 选项卡 viewpager 问题

android - AppCompat v22.1.0 没有为 fragment 正确设置所有 xml 小部件的主题

java - 未找到当前线程 : Spring 3 and Hibernate 4 (Using @PostConstruct annotation) 的 session

java - 如何将下面的android方法转换为递归方法?

java - 错误 [SoapUI] 发生错误 [找不到适合 jdbc :oracle:thin:@//174. 23.0.187:1111/qwe 的驱动程序]