Что такое Fragment? В чём разница между Fragment и Activity?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Fragment?
Fragment — это компонент пользовательского интерфейса в Android, представляющий часть поведения или части интерфейса внутри Activity. Fragment можно считать «под-активностью», которая имеет собственный жизненный цикл, может получать собственные события ввода и которую можно добавлять или удалять во время работы родительской Activity. Фрагменты были введены в API 11 (Android 3.0) для поддержки более динамичных и адаптивных пользовательских интерфейсов на устройствах с разными размерами экрана, особенно на планшетах.
Основные характеристики Fragment:
- Жизненный цикл, зависящий от родительской Activity.
- Собственный layout, управляемый через метод
onCreateView(). - Возможность повторного использования в разных Activity.
- Back Stack управления, позволяющий осуществлять транзакции между фрагментами.
- Взаимодействие с Activity через FragmentManager.
Пример базового фрагмента:
class MyFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Загрузка layout для фрагмента
return inflater.inflate(R.layout.fragment_layout, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Инициализация UI элементов после создания View
val textView: TextView = view.findViewById(R.id.text_view)
textView.text = "Hello from Fragment!"
}
}
Разница между Fragment и Activity
1. Роль и предназначение
- Activity — это основной компонент приложения, представляющий одно окно с пользовательским интерфейсом. Она выступает точкой входа для взаимодействия пользователя и управляет всей логикой одного «экрана».
- Fragment — это модульная часть интерфейса внутри Activity, предназначенная для создания многокомпонентных, адаптивных и динамически изменяемых UI. Фрагмент не может существовать самостоятельно вне Activity.
2. Жизненный цикл
Жизненный цикл Fragment более сложный и напрямую зависит от жизненного цикла родительской Activity.
Основные методы жизненного цикла Activity:
onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroy()
Дополнительные методы жизненного цикла Fragment:
onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume()
-> onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
Ключевое отличие: Fragment имеет дополнительные методы, связанные с его View (onCreateView, onDestroyView) и связью с Activity (onAttach, onDetach).
3. Управление и композиция
- Activity управляется системой Android через Task Stack. Переход между Activity обычно требует запуска новой Activity.
- Fragment управляется FragmentManager внутри Activity. Фрагменты можно динамически добавлять, заменять, удалять в рамках одной Activity, используя FragmentTransaction.
Пример транзакции фрагмента:
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragment_container, MyFragment())
transaction.addToBackStack("my_fragment")
transaction.commit()
4. Многопоточность и контекст
- Activity предоставляет Context для всего своего содержимого. Она запускается в отдельном потоке UI.
- Fragment использует контекст родительской Activity (через
getActivity()илиrequireActivity()). Важно помнить, что фрагмент разрушается при разрушении Activity.
5. Повторное использование и модульность
- Fragment предназначены для повторного использования в разных Activity и компоновки интерфейсов. Например, один фрагмент списка можно использовать в Activity для планшетов и телефонов.
- Activity обычно уникальна для конкретной функциональности и редко используется повторно как компонент UI.
6. Обработка событий и взаимодействие
- Activity обрабатывает системные события (например, нажатие кнопки назад) на уровне всего окна.
- Fragment может обрабатывать собственные события внутри своей View, но также зависит от Activity для многих системных взаимодействий.
7. Архитектурные различия в современных приложениях
В современной разработке с использованием Jetpack и Single Activity Architecture:
- Activity часто становится контейнером-координатором, управляющим несколькими фрагментами.
- Fragment становится основным UI компонентом, содержащим бизнес-логику и представление, особенно в сочетании с ViewModel.
Практические рекомендации по выбору
Когда использовать Activity:
- Точка входа приложения (Main Activity).
- Когда требуется полностью отдельный экран с собственным Task Stack.
- Для обработки глубоких ссылок или специфичных Intent.
- Когда компонент должен работать относительно независимо.
Когда использовать Fragment:
- Для создания адаптивных интерфейсов под разные размеры экрана.
- Для модульных, повторно используемых компонентов UI.
- В рамках Single Activity App для управления навигацией через Navigation Component.
- Когда требуется динамическое изменение частей интерфейса без перезагрузки всей Activity.
Важно: Несмотря на различия, Fragment и Activity дополняют друг друга. Правильное их сочетание позволяет создавать гибкие, производительные и удобные для пользователя Android приложения.