Как убедиться, что в действии создан фрагмент из статического метода new Instance - PullRequest
2 голосов
/ 08 октября 2019

Я создаю фрагмент, который будет использоваться другими разработчиками. Фрагменты должны иметь общедоступный конструктор, который 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 Ответ

2 голосов
/ 08 октября 2019

Проверка, включен ли набор аргументов во время 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.");
    }
}
...