Ответ
Для вызова метода Activity из фрагмента нужно:
- Получить ссылку на Activity через
requireActivity()илиactivity(с проверкой на null) - Привести 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()
Использование интерфейса предпочтительнее, так как уменьшает связность и позволяет переиспользовать фрагмент.