Назад к вопросам
Middle
187
Как организовать взаимодействие между Activity и фрагментом?
Ответ от нейросети
sobes.tech AI
Взаимодействие между Activity и фрагментом в Android можно организовать несколькими способами:
- Через интерфейсы. Фрагмент объявляет интерфейс с методами обратного вызова, которые реализует 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) {
// Обработка данных из фрагмента
}
}
- Использование 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
}
-
Использование EventBus (например, Otto, EventBus) — паттерн публикации-подписки для обмена событиями.
-
Передача аргументов через Bundle при создании фрагмента — для передачи данных из Activity в фрагмент.
Выбор способа зависит от задачи и архитектуры приложения.