← Назад к вопросам

Что такое Fragment? В чём разница между Fragment и Activity?

1.0 Junior🔥 211 комментариев
#Android компоненты#Жизненный цикл и навигация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое 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 приложения.