Когда я впервые начал разработку Android, мне в голову пришло, что создание фрагмента всегда должно выполняться с помощью статического метода, который вы создаете, который использует конструктор фрагментов по умолчанию, назначает аргументы через пакет, устанавливает пакет на фрагмент и затем возвращает его. Например:
public static MyFragment newInstance() {
MyFragment frag = new MyFragment();
Bundle args = new Bundle();
args.putInt("lifesAnswer", 42);
frag.setArguments(args);
return frag;
}
Насколько я понимаю, причина, по которой мы это делаем, заключается в том, что теперь Android будет неявно обрабатывать восстановление фрагмента и его аргументов без какой-либо дополнительной работы, если этот результат произойдет и восстановление необходимо.
А что если я использовал здесь интерфейс фрагментов, чтобы установить произвольное значение, которое можно передать в newInstance()
в качестве параметра. Например:
public static MyFragment newInstance(int someValue) {
MyFragment frag = new MyFragment();
frag.setInstanceValue(someValue); // using a public setter
return frag;
}
для ясности, setInstanceValue()
- это просто ваш стандартный сеттер, например:
public void setInstanceValue(int value) {
this.value = value;
}
Является ли этот подход совершенно законным и безопасным? Для практического контекста здесь у меня есть фрагмент, который будет многократно использоваться в окне просмотра, и все, что отличается от него, - это некоторый текст и фоновое изображение контейнеров. Я мог бы просто передать разрешенные целочисленные значения и установить их в пакете, например, передав R.String.my_string
, затем установить его в пакете и использовать позже, но это заставило меня задуматься. Допустимо ли применять второй подход или я всегда должен использовать первый подход.