Ответ
Нет, 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 — это такой навороченный, но привередливый модуль, который живет внутри этой базы. Сам по себе он — не база. Но он знает, где эта база находится, и может в неё залезть.
Вот смотри, у фрагмента есть два способа достучаться до контекста, и тут важно не проебаться:
-
requireContext()— это как крикнуть: «Эй, контекст, выходи, сука, я знаю, ты тут!». Если фрагмент прикреплён к активности (то есть живёт в ней), метод вернётContext. А если фрагмент болтается сам по себе (отсоединён), то он тебе кинет исключение —IllegalStateException. Жёстко, но честно. Используй, когда на 146% уверен, что фрагмент на месте. Доверия ебать ноль к его состоянию в этот момент. -
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(). Хочешь сам всё проверить и обработать null — getContext(). А главное — запомни, что фрагмент контекстом не является. Это частая ошибка, из-за которой потом терпения ноль ебать, когда код не компилится.