Middle
Liste todas as formas de transferência de dados entre fragmentos.
sobes.tech IA
Resposta da IA
-
Argumentos do Bundle: A forma mais comum. Os dados são transmitidos como Bundle através do método
setArguments()do fragmento.// No fragmento emissor val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... transição para o TargetFragment // No fragmento receptor override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... usar value } -
ViewModel Compartilhado: Usado para transmitir dados relacionados ao ciclo de vida da atividade ou de vários fragmentos.
// No ViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Em ambos os fragmentos private val sharedViewModel: SharedViewModel by activityViewModels() // No fragmento emissor sharedViewModel.data.value = "dados a transmitir" // No fragmento receptor sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... usar data } -
Interfaces de Callback: O fragmento pode definir uma interface que a atividade implementa. O fragmento chama os métodos dessa interface, passando dados para a atividade, que pode transmiti-los a outro fragmento.
// Interface no fragmento emissor interface OnDataPass { fun onDataPass(data: String) } // Fragmento emissor private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context deve implementar OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Atividade class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Assume que TargetFragment tem o método updateData } } // Fragmento receptor fun updateData(data: String) { // ... atualizar UI ou salvar data } -
API de Resultado de Fragmento: Forma moderna de transmitir resultados entre fragmentos, apresentada na versão 1.3.0 do AndroidX Fragment.
// No fragmento emissor setFragmentResult("requestKey", bundleOf("bundleKey" to "resultado")) // No fragmento receptor setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... usar result }