Я действительно путаю с Fragment
lifecycle, особенно на время, чтобы позвонить getActivity()
. Иногда вы не можете получить Activity
по getActivity()
. И это всегда вызывало некоторые загадочные ошибки.
Спасибо, что любой может решить загадку.Почему мы можем вызвать getActivity() в onCreateView, который выполняется до onActivityCreated?
ответ
getActivity()
может быть нулевым, пока ваш фрагмент находится в процессе подготовки и готов быть готовым.
Жизненный цикл фрагмента связан с методами обратного вызова. Этот метод будет вызываться где-то во времени, пока фрагмент готовится.
- Fragment.onActivityCreated(Bundle) место, когда фрагмент активность не будет нулевой, т.е.
getActivity()
будет действительный экземпляром. Это происходит после того, какonCreateView()
хотя
Ваш безопасный выбор для существования деятельности является:
Что делать, если мне нужно действие для создания адаптера в onCreate? –
У меня есть 'getActivity() == null' в 'Fragment.onViewCreated (View, Bundle)' несколько раз, поэтому он небезопасен, вы всегда должны проверить, не имеет ли getActivity() значение null в 'onCreateView()', 'onViewCreated()' и даже 'onResume()' –
Мы не ставим на вещи. Либо он должен быть действительным действием в onAttach(), либо нет. Почему нет четкого ответа на использование getActivity()? –
Соответствующий пример кода, пожалуйста! – alfasin
Из [Документация фрагментов] (http://developer.android.com/guide/components/fragments.html): «Внимание: если вам нужен объект Контекст в вашем фрагменте, вы можете вызвать getActivity(). Однако будьте осторожны, чтобы вызвать getActivity() только тогда, когда фрагмент привязан к активности. Когда фрагмент еще не прикреплен или был отсоединен в конце его жизненного цикла, getActivity() вернет null.'. Поэтому его следует вызывать из 'onAttach'. –
@EricMartinez Я не думаю, что это правильная интерпретация документации. Я понимаю, что поскольку фрагмент связан с активностью при вызове onAttach(), он также должен быть доступен для следующих методов жизненного цикла, таких как onCreate() и onCreateView(), хотя он запутывает, что они вызываются до onActivityCreated(). В любом случае, я не помню, чтобы когда-либо получал null при вызове getActivity() в onCreateView(), и все приложения для Android, которые я написал, сделали это. – RenniePet