Ответ
Фрагмент имеет сложный жизненный цикл с ключевыми методами:
- onAttach() - связь с Activity
- onCreate() - инициализация
- onCreateView() - создание UI
- onViewCreated() - завершение создания View
- onStart() - видимый, но не активный
- onResume() - активный и взаимодействующий
- onPause() - частично видимый
- onStop() - невидимый
- onDestroyView() - уничтожение View
- onDestroy() - очистка ресурсов
- onDetach() - отвязка от Activity
Пример:
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.fragment_example, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Инициализация UI элементов
}
Важно: onCreateView() вызывается каждый раз при повторном создании UI, а onCreate() - только один раз.
Ответ 18+ 🔞
А, ну это же классика, ёпта! Смотри, фрагмент — это как отдельный кусок интерфейса, который можно впихнуть в активити. Но жизненный цикл у него, бля, сложнее, чем у средневекового алхимика. Прямо хитрая жопа, а не компонент.
Вот смотри, как он пляшет:
- onAttach() — фрагмент пристёгивается к активити. Типа «здарова, родитель, я твой!».
- onCreate() — тут он инициализируется. Без интерфейса ещё, зато уже с
Bundle(если его сохранили). Вызывается один раз, запомни это, а то потом сам от себя охуеешь. - onCreateView() — а вот тут он уже надувает свою верстку из XML. Возвращает корневую
View. Это как раз тот метод, где ты пишешьreturn inflater.inflate(R.layout.fragment_example, container, false). Важный момент: этот метод могут вызывать несколько раз, если фрагмент пересоздают! - onViewCreated() — вьюха создана, можно наконец найти все
TextViewиButtonпо id и повесить клик-листенеры. Удобное место, чтоб не городить всё вonCreateView. - onStart() — фрагмент становится видимым. Но это ещё не всё.
- onResume() — вот теперь всё, пользователь может с ним взаимодействовать. Активность — полная.
- onPause() — что-то его перекрыло (другой фрагмент поверх вылез). Частично видим, но уже не в фокусе.
- onStop() — фрагмент вообще не видно. Спрятался.
- onDestroyView() — вьюха фрагмента уничтожается, но сам объект ещё жив. Все ссылки на элементы интерфейса надо занулять тут, а то будет утечка памяти — доверия ебать ноль к системе.
- onDestroy() — финальная очистка. Прощай, жестокий мир.
- onDetach() — и окончательно отстыковывается от активити. Свободен!
Вот тебе пример кода, его не трогаем, он святой:
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.fragment_example, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Инициализация UI элементов
}
Запомни главную фишку, а то будет вам хиросима и нигерсраки: onCreate() вызывается один раз за жизнь фрагмента, а onCreateView() — может вызываться при каждом пересоздании его интерфейса. Если будешь в onCreateView бизнес-логику пихать или тяжёлые операции — получишь терпения ноль ебать у пользователя. Всё тяжёлое — в onCreate() или во ViewModel.