Junior
Como transferir dados de um fragmento para outro?
sobes.tech IA
Resposta da IA
-
Argumentos do Bundle: Utilizados para passar tipos de dados primitivos e objetos que implementam
ParcelableouSerializableao criar uma nova instância de um fragmento.// No fragmento que envia val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // No fragmento que recebe override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... uso de value } -
ViewModel Compartilhado: Fragmentos pertencentes à mesma Activity podem usar um
ViewModelcomum para trocar dados.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // No fragmento que envia private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // No fragmento que recebe private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... uso de value } -
Usando interface de callback: Um fragmento chama um método na Activity, e a Activity então chama um método em outro fragmento.
// Interface na Activity ou em arquivo separado interface DataTransferListener { fun onDataReceived(data: String) } // No fragmento que envia (activity as? DataTransferListener)?.onDataReceived("value") // Na Activity que implementa a interface override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // No fragmento que recebe fun updateUI(data: String) { // ... atualização da UI com os dados } -
API de Resultado de Fragmento: Método moderno e recomendado para troca de dados entre fragmentos.
// No fragmento que envia (define o resultado) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // No fragmento que recebe (ouve o resultado) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... uso do resultado }