Как вызвать метод Activity из фрагмента

«Как вызвать метод Activity из фрагмента» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для вызова метода Activity из фрагмента нужно:

  1. Получить ссылку на Activity через requireActivity() или activity (с проверкой на null)
  2. Привести Activity к нужному типу (если используется кастомный интерфейс)

Рекомендуемый способ через интерфейс:

// В фрагменте
interface ActivityListener {
    fun onFragmentAction(data: String)
}

override fun onAttach(context: Context) {
    super.onAttach(context)
    if (context is ActivityListener) {
        listener = context
    } else {
        throw RuntimeException("Activity must implement ActivityListener")
    }
}

// Вызов
listener.onFragmentAction("Some data")

Прямой вызов (менее предпочтительно):

(requireActivity() as MainActivity).someMethod()

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