Ответ 1
TL; ДР:
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.
Надеюсь, это поможет!