Sobes.tech
Назад к вопросам
Junior — Middle
83

Какими методами осуществляется взаимодействие между Fragment, находящимися в одной Activity?

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

sobes.tech AI

Взаимодействие между фрагментами в одной Activity обычно реализуется через Activity, которая выступает посредником. Основные методы:

  1. Через интерфейс обратного вызова (Callback Interface)

    • Фрагмент объявляет интерфейс с методами для передачи данных.
    • Activity реализует этот интерфейс и получает данные от одного фрагмента.
    • Activity передаёт данные другому фрагменту.
  2. Использование ViewModel с жизненным циклом Activity (Shared ViewModel)

    • Создаётся ViewModel, связанная с Activity.
    • Оба фрагмента получают доступ к одной и той же ViewModel.
    • Через LiveData или другие observable объекты фрагменты обмениваются данными.
  3. Использование FragmentManager для поиска фрагментов и вызова их методов напрямую

    • Менее предпочтительный способ, так как увеличивает связанность.

Пример с интерфейсом:

// В Fragment A
interface OnDataPass {
    fun onDataPass(data: String)
}

class FragmentA : Fragment() {
    lateinit var dataPasser: OnDataPass

    override fun onAttach(context: Context) {
        super.onAttach(context)
        dataPasser = context as OnDataPass
    }

    fun passData() {
        dataPasser.onDataPass("Привет от FragmentA")
    }
}

// В Activity
class MainActivity : AppCompatActivity(), FragmentA.OnDataPass {
    override fun onDataPass(data: String) {
        val fragmentB = supportFragmentManager.findFragmentById(R.id.fragmentB) as FragmentB
        fragmentB.updateData(data)
    }
}