Intereting Posts
Maps API v2 с различными действиями маркера Android.os.TransactionTooLargeException on Nougat Использование фрагмента Android без использования UI SetResult не работает, когда нажата кнопка BACK Настроить разделитель / разделитель в раскрывающемся списке AutocompleteTextview Приостановить приложение Android с помощью Phonegap OnOptionsItemSelected не получает вызов при использовании пользовательского вида действий IllegalArgumentException: Не удалось найти корень конфигурации, содержащий xxx на FileProvider.getUriForFile Как удалить приложение из adb, не зная, что это имя пакета Сделать панель прозрачной FloatingActionButton расширяется в новую деятельность Как установить мое приложение для мобильных телефонов в Android Kitkat? Почему произошла эта ошибка? Java.lang.RuntimeException: ImageLoader должен быть init с настройкой перед использованием Предотвратите второй вызов ajax от ожидания до завершения первого вызова ajax Выпускает ли ОС Android Wakelock, если приложение или служба, содержащая его, будут убиты?

Android – В чем разница между getArguments и Bundle, полученными в onCreate

Это может показаться глупым вопросом, но в чем разница между getArguments Bundle и Bundle, полученными в onCreate?

Solutions Collecting From Web of "Android – В чем разница между getArguments и Bundle, полученными в onCreate"

TL; DR:

Fragment.getArguments () предназначен для создания Фрагмента.

OnCreate (Bundle) предназначен для извлечения пакета из предыдущего экземпляра.

В деталях:

Я прочесывал в Интернете для этого и спросил опытного разработчика Android, поэтому вот достойное объяснение:

Пакет, переданный как параметр в функции onCreate, имеет значение, если был предыдущий экземпляр фрагмента, который обновляется при вызове функции onSaveInstanceState . (Подробнее об этом вы можете прочитать в официальных документах: https://developer.android.com/training/basics/activity-lifecycle/recreating.html )

Однако функция Fragment.getArguments () используется при первоначальном создании фрагмента. Вы впервые перейдете к фрагменту, а предыдущий экземпляр этого фрагмента не будет существовать. В этом случае вы можете установить локальные переменные внутри вашего фрагмента, которые были разделены с помощью функций setArguments () и getArguments (). (Подробнее об этом здесь: https://developer.android.com/reference/android/app/Fragment.html )

Поэтому: надежный код может выглядеть так:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); mView = inflater.inflate(R.layout.fragment_name, container, false); mContext = getActivity(); if(savedInstanceState != null){ Log.d("yourapp", "A SavedInstanceState exists, using past values"); mValue = savedInstanceState.getString("valueString"); }else{ Log.d("yourapp", "A SavedInstanceState doesn't exist"); Bundle bundle = getArguments(); mValue = bundle.getString("valueString"); } } 

Который обрабатывает оба случая в вашем состоянии onCreate.

Надеюсь это поможет!

Пакет, полученный в onCreate, содержит данные, которые он недавно предоставил, если активна активность, а getArguments Bundle возвращает пакет, который был предоставлен в качестве аргумента.

Набор аргументов, используемый для создания фрагмента и после его установки, не может быть установлен снова. Пакет в onCreate / onCreateView / onActivityCreated / onViewStateRestored является сохраненнымInstanceState. Вы можете использовать это, чтобы получить сохраненные значения, которые вы сохраняете с помощью переопределения onSaveInstanceState . При создании фрагмента пакет savedInstanceState обычно имеет значение null, поэтому вы можете использовать getArguments.

Еще одна вещь о getArguments, вам не нужно сохранять эти ценности. Они будут восстановлены для вас кодом фрагмента . Если вы попытаетесь установить атрибуты на фрагмент, который уже есть, вы столкнетесь с IllegalStateException

Я хотел бы добавить к ответу N15M0_jk . Иногда нет необходимости сохранять состояние фрагмента (для статических фрагментов), и вы можете использовать только getArguments() для повторного создания, поскольку аргументы, заданные с setArguments() , сохраняются даже после уничтожения.

См. Ссылку на setArguments ()