После поворота, onCreate() фрагмент вызывается перед onCreate () FragmentActivity
Я использую FragmentActivity и фрагменты.
при запуске приложения:
FragmentActivity onCreate() <------
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onAttach()
Fragment onCreate() <------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
Fragment onResume()
все в порядке, FragmentActivity onCreate () вызывается перед Fragment onCreate ().
И когда я вращаюсь:
Fragment onPause()
FragmentActivity onPause()
Fragment onStop()
FragmentActivity onStop()
Fragment onDestroyView()
Fragment onDestroy()
Fragment onDetach()
FragmentActivity onDestroy()
---
Fragment onAttach()
Fragment onCreate() <----------
FragmentActivity onCreate() <---------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onResume()
Fragment onCreate () вызывается перед FragmentActivity onCreate (). Почему это несовместимо?
в FragmentActivity onCreate() я генерирую некоторые данные, которые получает фрагмент onCreate (). Из-за этого странного поведения мне пришлось переехать мой код от фрагмента onCreate() до фрагмента onCreateView (), чтобы убедиться, что мои данные были сгенерированы раньше.
Я использую FragmentStatePagerAdapter для хранения фрагментов, может быть, в этом причина?
2 ответов:
вы не должны рассчитывать на действительное до
onActivityCreated()вызов в жизненном цикле фрагмента.вызывается при создании действия фрагмента и создании экземпляра иерархии представления этого фрагмента. Он может быть использован для выполнения окончательной инициализации, как только эти части находятся на месте, такие как получение представлений или восстановление состояния.
точные причины, по которым порядок перестроения не является линейным, я не могу вам сказать. Это, наверное, больше эффективный, чтобы позволить каждому компоненту перезапускаться в своем собственном темпе, а не заставлять жесткий порядок. Например, я предпочитаю, чтобы мой LoaderManager запускался как можно раньше, и мы будем беспокоиться о макете для его содержимого позже.
(Я люблю хорошую диаграмму.)
фрагменты восстанавливаются во время действия
onCreate(). Важно, однако, что они восстанавливаются в базовом классе активностиonCreate(). Таким образом, если вы называетеsuper.onCreate()во-первых, все остальные вашиonCreate()метод будет выполняться после восстановления фрагментов.одним из возможных решений является восстановление вашего состояния или вычисление того, какие данные когда-либо понадобятся вашему фрагменту до вы называете
super.onCreate()жизненный цикл выглядит вот так:
ACTIVITY onCreate (pre-super) FRAGMENT onAttach ACTIVITY onCreate (post-super)чтобы сделать что-то вроде этого:
@Override public void onCreate( final Bundle savedInstanceState ) { Log.d( TAG, "ACTIVITY onCreate (pre-super)" ); // Do your processing here super.onCreate( savedInstanceState ); // Fragments will be restored here Log.d( TAG, "ACTIVITY onCreate (post-super)" ); }

Comments