Назад к вопросам
Middle
69
questionbank

Как можно организовать коммуникацию между фрагментами используя колбеки?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Создать интерфейс в одном фрагменте:

interface MyCallback {
    fun onDataPassed(data: String)
}

Реализовать этот интерфейс в родительской Activity или другом фрагменте/классе, который будет посредником:

class MyActivity : AppCompatActivity(), MyCallback {
    override fun onDataPassed(data: String) {
        // Логика обработки данных, например, передать их другому фрагменту
    }
}

В первом фрагменте получить ссылку на этот колбэк:

class FirstFragment : Fragment() {
    private var callback: MyCallback? = null

    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is MyCallback) {
            callback = context
        } else {
            throw RuntimeException("$context must implement MyCallback")
        }
    }

    fun sendData(data: String) {
        callback?.onDataPassed(data)
    }
}

В вызывающем коде первого фрагмента вызвать метод для отправки данных:

// ... где-то в FirstFragment
sendData("Hello from Fragment 1")

Метод onAttach гарантирует, что родительский контекст реализует необходимый интерфейс, предотвращая ClassCastException. При использовании нескольких фрагментов и сложной логики предпочтительнее использовать ViewModel или другие архитектурные компоненты для организации связи.