Ответ
Для передачи данных обратно между фрагментами в Android можно использовать:
- Shared ViewModel - общая ViewModel для обоих фрагментов:
class SharedViewModel : ViewModel() {
val data = MutableLiveData<String>()
}
// В первом фрагменте
viewModel.data.observe(viewLifecycleOwner) { data ->
// обработка данных
}
// Во втором фрагменте
viewModel.data.value = "Some data"
- Интерфейс-колбэк - создаем интерфейс в первом фрагменте и реализуем его в Activity:
interface DataCallback {
fun onDataReceived(data: String)
}
// В Activity
override fun onDataReceived(data: String) {
// передаем данные в первый фрагмент
}
- Fragment Result API (рекомендуемый способ):
// В первом фрагменте (получатель)
parentFragmentManager.setFragmentResultListener("requestKey", this) { key, bundle ->
val data = bundle.getString("data_key")
}
// Во втором фрагменте (отправитель)
val result = bundleOf("data_key" to "Some data")
parentFragmentManager.setFragmentResult("requestKey", result)
- Аргументы Bundle - через setArguments() при создании фрагмента
Для простых случаев лучше использовать Fragment Result API, для сложных - SharedViewModel.