Привет, я сейчас изучаю фрагменты, и у меня есть некоторые сомнения.
V1: Так что правильный способ создания нового фрагмента должен быть с "newInstance" вместо конструктора и будет что-то вроде этого:
Fragment fragment = MyFragment.newInstance(variable);
И код класса «MyFragment» должен быть таким:
private static final String ARG_PARAM1 = "param1";
private int variable;
public MyFragment() {
//Empty constructor
}
Новый экземпляр получит параметр и поместит их в Связать и установить аргумент для класса
public static mi_fragment newInstance(Int param1) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putInt(ARG_PARAM1, param1);
fragment.setArguments(args);
return fragment;
}
Затем после установки его метод onCreate подберет аргумент:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
variable = getArguments().getInt(ARG_PARAM1);
}
V2: Но я все еще не вижу проблемы с использованием конструктора и программной установкой аргументов:
Bundle bundle = new Bundle();
bundle.putInt("key", variable);
Fragment fragment = new MyFragment();
fragment.setArguments(bundle);
Затем я выбираю аргумент метода onCreate:
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
if(bundle!=null){
variable = getArguments().getInt("key");
}
}
Поэтому я решил поискать на inte rnet об этом, и я нашел хороший ответ , но я все еще не могу понять это или когда вы могли бы использовать его.
способ пройти вещи для вашего фрагмента, чтобы они были доступны после повторного фрагмента созданный Android должен передать пакет методу setArguments.
Этот пакет будет доступен, даже если фрагмент будет каким-то образом воссоздан с помощью Android.
Итак, мой вывод является то, что вы поддерживаете пакет, и использование newInstance может заставить вас вернуться к последнему фрагменту, например. Но, вероятно, я ошибаюсь, поэтому мне нужна помощь.
Вопрос: В чем главное различие между ними и какая вы получаете выгоду от newInstance? Пример.