Является ли Fragment наследником Context

Ответ

Нет, Fragment не является наследником Context. Однако, Fragment имеет доступ к Context через методы:

  • requireContext() – возвращает Context (выбрасывает исключение, если контекст null).
  • getContext() – возвращает Context или null (если фрагмент не привязан к активности).

Пример:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val context = requireContext() // или getContext()
    Toast.makeText(context, "Hello!", Toast.LENGTH_SHORT).show()
}

Используйте requireContext(), если уверены, что фрагмент привязан к активности.

Ответ 18+ 🔞

А, ну это классика, ёпта! Вечно все путаются с этими Fragment и Context. Слушай сюда, раз и навсегда запомни: НЕТ, Fragment — это не сын, не внук и даже не троюродный племянник Context. Они из разных семейств, блядь.

Представь себе: Context — это как бы универсальная база, коробка с инструментами и доступом ко всему в приложении. А Fragment — это такой навороченный, но привередливый модуль, который живет внутри этой базы. Сам по себе он — не база. Но он знает, где эта база находится, и может в неё залезть.

Вот смотри, у фрагмента есть два способа достучаться до контекста, и тут важно не проебаться:

  1. requireContext() — это как крикнуть: «Эй, контекст, выходи, сука, я знаю, ты тут!». Если фрагмент прикреплён к активности (то есть живёт в ней), метод вернёт Context. А если фрагмент болтается сам по себе (отсоединён), то он тебе кинет исключение — IllegalStateException. Жёстко, но честно. Используй, когда на 146% уверен, что фрагмент на месте. Доверия ебать ноль к его состоянию в этот момент.

  2. getContext() — это более осторожный стук в дверь: «Контекст, ты дома?». Может вернуть тебе Context, а может вежливо сказать null, если фрагмент в отрыве. Меньше паники, больше проверок.

Вот тебе живой пример, чтобы вообще ни хуя не забыть:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    // Берём контекст железной хваткой. Если его нет — пусть всё падает, ибо это пиздец.
    val safeContext = requireContext()
    // И делаем с ним что хотим
    Toast.makeText(safeContext, "Hello, я из фрагмента!", Toast.LENGTH_SHORT).show()
}

Короче, правило простое, как три копейки: хочешь жёсткой гарантии и готов ловить исключение — requireContext(). Хочешь сам всё проверить и обработать nullgetContext(). А главное — запомни, что фрагмент контекстом не является. Это частая ошибка, из-за которой потом терпения ноль ебать, когда код не компилится.