Android: Куда поместить действие onCreate() в фрагмент?

Я конвертирую все свои действия в фрагменты, чтобы использовать их в ViewPager.

Я искал это, но не смог найти удовлетворительного ответа, поэтому я спрашиваю его здесь.

В моих действиях я написал код в методе onCreate(). Например, я вызываю findViewById(), чтобы связать некоторые xml-кнопки с моей активностью. Я также делаю некоторые виды невидимыми в onCreate(), устанавливаю OnClickListener(), заполняю текст TextView текстом и удаляю уведомление, все в методе onCreate().

Мой вопрос: где я должен поместить этот код в фрагмент? В onCreate()? onCreateView()? onActivityCreated()? и почему?

Большое спасибо заранее!

Ответ 1

Хотя ответ Прагняни близок, в нем мало образовательной ценности. Кроме того, есть более подходящий вариант для его второго заявления.

Где я должен поместить этот код во фрагмент? В onCreate()? onCreateView()? onActivityCreated()? и почему?

Короткий ответ: либо onCreateView(), либо onActivityCreated(). Иерархия представления не будет создана до onCreateView(), так что самая ранняя точка в жизненном цикле фрагмента, которую вы могли бы раздуть в виде представлений, и подключить прослушиватели кликов и т.д. Поскольку onActivityCreated() всегда будет выполняться после onCreateView(), это также подходящее место. onCreate() может быть пропущен в пользу системы, временно отделяющей фрагмент и повторно подключающую его, например. когда сохраняет фрагменты.

Прагняни правильно, указав, что раздувание взглядов фрагмента несколько отличается от раздувания взглядов в деятельности. Более конкретно: фрагмент не определяет метод findViewById(), поэтому вам нужно вызвать его на какой-либо другой объект.

Вместо использования getActivity().findViewById() вам понадобится getView().findViewById(). Причиной этого является то, что если вы используете активность для просмотра вида, тогда вы столкнетесь с проблемой, когда к нему будут прикреплены несколько фрагментов с одинаковыми идентификаторами вида. Это будет иметь место, если вы повторно используете идентификаторы вида в макетах ваших различных фрагментов или если вы показываете два одинаковых фрагмента, которые отображают разные данные. В обоих случаях будет возвращено только первое совпадение, тогда как вы действительно хотите, чтобы представление просматривалось в конкере фрагмента. Именно то, что возвращает getView(), корневой вид фрагмента (который вы вернули в onCreateView()) и, таким образом, ограничивает область поиска соответствующим образом.

Ответ 2

1. Оставленный onCreate пустой и просто вызовите super.onCreate()

2. Вместо findViewById() используйте getActivity(). findViewById()  всегда используйте getActivity(), где вам нужен контекст представления.

 Do all other operations in onCreateview()