Fragment.newInstance() vc onSaveInstanceState()

Почему рекомендуется (разные источники) не перегружать конструктор для Fragment, а использовать static Fragment.newInstance() с передачей ему Bundle?

Когда вы перегружаете конструктор, вы просто явно определяете значение по умолчанию. Затем, если ваш Fragment будет воссоздан по какой-либо причине, вы используете onSaveInstanceState() с последующим извлечением данных на onCreate(). Аналогичная ситуация с использованием Fragment.newInstance(), единственная разница, которую вам не нужно создавать публичный конструктор по умолчанию.

Я что-то понимаю неправильно? Большое вам спасибо.

Ответ 1

Почему рекомендуется (разные источники) не перегружать конструктор для фрагментов, а использовать статический Fragment.newInstance() с передачей Bundle на него?

Android автоматически воссоздает все незакрепленные фрагменты при изменении конфигурации (например, вращение экрана), и для этого будет использоваться конструктор с нулевым аргументом. Bundle, поставляемый через setArguments(), сохраняется как часть состояния экземпляра и присваивается вновь воссозданному фрагменту. Следовательно, вам нужно реализовать только один метод (метод factory), а не три (конструктор ненулевых аргументов и onSaveInstanceState() и onViewStateRestored()), чтобы использовать предложенный вами подход.

Я что-то понимаю неправильно?

Если это сработает для вас, подойдите к нему. Как вы заметили, метод factory - это рекомендация, а не требование.

Ответ 2

Его лучшая идея не перегружать этот конструктор, потому что Android может убивать ваши фрагменты всякий раз, когда это необходимо. И, чтобы потом их воссоздать, он вызовет конструктор без аргументов.

Чтобы восстановить параметры, просто вызовите getArguments().

getArguments().getInt("myInt", 0);

Аргументы будут доступны, даже если ваш фрагмент воссоздан.