2015-07-06 2 views
10

Я действительно путаю с Fragmentlifecycle, особенно на время, чтобы позвонить getActivity(). Иногда вы не можете получить Activity по getActivity(). И это всегда вызывало некоторые загадочные ошибки.
Спасибо, что любой может решить загадку.Почему мы можем вызвать getActivity() в onCreateView, который выполняется до onActivityCreated?

+0

Соответствующий пример кода, пожалуйста! – alfasin

+1

Из [Документация фрагментов] (http://developer.android.com/guide/components/fragments.html): «Внимание: если вам нужен объект Контекст в вашем фрагменте, вы можете вызвать getActivity(). Однако будьте осторожны, чтобы вызвать getActivity() только тогда, когда фрагмент привязан к активности. Когда фрагмент еще не прикреплен или был отсоединен в конце его жизненного цикла, getActivity() вернет null.'. Поэтому его следует вызывать из 'onAttach'. –

+1

@EricMartinez Я не думаю, что это правильная интерпретация документации. Я понимаю, что поскольку фрагмент связан с активностью при вызове onAttach(), он также должен быть доступен для следующих методов жизненного цикла, таких как onCreate() и onCreateView(), хотя он запутывает, что они вызываются до onActivityCreated(). В любом случае, я не помню, чтобы когда-либо получал null при вызове getActivity() в onCreateView(), и все приложения для Android, которые я написал, сделали это. – RenniePet

ответ

10

getActivity() может быть нулевым, пока ваш фрагмент находится в процессе подготовки и готов быть готовым.

Жизненный цикл фрагмента связан с методами обратного вызова. Этот метод будет вызываться где-то во времени, пока фрагмент готовится.

  • Fragment.onActivityCreated(Bundle) место, когда фрагмент активность не будет нулевой, т.е. getActivity() будет действительный экземпляром. Это происходит после того, как onCreateView() хотя

Ваш безопасный выбор для существования деятельности является:

+1

Что делать, если мне нужно действие для создания адаптера в onCreate? –

+3

У меня есть 'getActivity() == null' в 'Fragment.onViewCreated (View, Bundle)' несколько раз, поэтому он небезопасен, вы всегда должны проверить, не имеет ли getActivity() значение null в 'onCreateView()', 'onViewCreated()' и даже 'onResume()' –

+4

Мы не ставим на вещи. Либо он должен быть действительным действием в onAttach(), либо нет. Почему нет четкого ответа на использование getActivity()? –