Какие знаешь способы передачи данных при обратном переходе из одного фрагмента в другой

«Какие знаешь способы передачи данных при обратном переходе из одного фрагмента в другой» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для передачи данных обратно между фрагментами в Android можно использовать:

  1. Shared ViewModel - общая ViewModel для обоих фрагментов:
class SharedViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// В первом фрагменте
viewModel.data.observe(viewLifecycleOwner) { data -> 
    // обработка данных
}

// Во втором фрагменте
viewModel.data.value = "Some data"
  1. Интерфейс-колбэк - создаем интерфейс в первом фрагменте и реализуем его в Activity:
interface DataCallback {
    fun onDataReceived(data: String)
}

// В Activity
override fun onDataReceived(data: String) {
    // передаем данные в первый фрагмент
}
  1. 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)
  1. Аргументы Bundle - через setArguments() при создании фрагмента

Для простых случаев лучше использовать Fragment Result API, для сложных - SharedViewModel.