Названия методов управления фрагментами очень запутаны, даже по мнению инженеров Google на досках объявлений (см. Комментарии выше). Я сделал небольшую демонстрацию, чтобы понять, как все работает на самом деле. Вот мои выводы. Не стесняйтесь поправлять меня, если я не прав.
Для первоначального добавления фрагмента в действие вы используете:
getFragmentManager (). beginTransaction (). add (R.id.container, mFragment) .commit ().
Это связывает Активность с Фрагментом, а также связывает Вид с Фрагментом.
Вот результирующие события жизненного цикла и другие важные значения, возвращаемые методом:
onAttach()
onCreate()
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Чтобы удалить фрагмент из действия, вы используете:
getFragmentManager (). BeginTransaction (). удалить (mFragment) .commit ().
Это удаляет любую связь с View или с Activity.
Вот результирующие события жизненного цикла и возвращаемые значения других важных методов:
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
mFragment.getView() == null: true
mFragment.getActivity() == null: true
Я заново добавил фрагмент сюда
Чтобы отсоединить добавленный фрагмент от действия, вы используете:
getFragmentManager (). BeginTransaction (). отсоединять (mFragment) .commit ().
Это удаляет любую связь с View, но сохраняет связь с Activity.
Вот результирующие события жизненного цикла и другие важные значения, возвращаемые методом:
onPause()
onStop()
onDestroyView()
mFragment.getView() == null: true
mFragment.getActivity() == null: false
Чтобы повторно прикрепить фрагмент, который был отсоединен к действию, вы используете:
getFragmentManager (). BeginTransaction (). присоединять (mFragment) .commit ().
Это создает новый вид для связи с фрагментом и поддерживает ассоциацию действий.
Вот результирующие события жизненного цикла и другие важные значения, возвращаемые методом:
onCreateView()
onViewCreated()
onActivityCreated()
onViewStateRestored()
onStart()
onResume()
mFragment.getView() == null: false
mFragment.getActivity() == null: false
Другие важные вещи, на которые стоит обратить внимание:
Если вы отсоедините фрагмент, а затем попытаетесь добавить его снова, используя add (), а не attach (), похоже, ничего не изменится.
если вы попытаетесь добавить фрагмент, который был удален с помощью remove () с помощью attach (), а не add (), похоже, ничего не изменится.
Когда getView () возвращает null, фрагмент может по-прежнему иметь внутренние ссылки на последний созданный им просмотр. Этот вид больше не действителен и не должен использоваться.