Sobes.tech
Назад к вопросам
Middle
187

Как организовать взаимодействие между Activity и фрагментом?

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

sobes.tech AI

Взаимодействие между Activity и фрагментом в Android можно организовать несколькими способами:

  1. Через интерфейсы. Фрагмент объявляет интерфейс с методами обратного вызова, которые реализует Activity. Фрагмент вызывает методы интерфейса для передачи данных или событий в Activity.
class MyFragment : Fragment() {
    interface OnDataPass {
        fun onDataPass(data: String)
    }

    private lateinit var dataPasser: OnDataPass

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

    fun passData(data: String) {
        dataPasser.onDataPass(data)
    }
}

class MyActivity : AppCompatActivity(), MyFragment.OnDataPass {
    override fun onDataPass(data: String) {
        // Обработка данных из фрагмента
    }
}
  1. Использование ViewModel с жизненным циклом Activity. Общий ViewModel позволяет Activity и фрагменту обмениваться данными через LiveData.
class SharedViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// В Activity и фрагменте
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)

// Фрагмент обновляет данные
model.data.value = "Новое значение"

// Activity наблюдает за изменениями
model.data.observe(this) { value ->
    // Обработка value
}
  1. Использование EventBus (например, Otto, EventBus) — паттерн публикации-подписки для обмена событиями.

  2. Передача аргументов через Bundle при создании фрагмента — для передачи данных из Activity в фрагмент.

Выбор способа зависит от задачи и архитектуры приложения.