Junior
¿Cómo transferir datos de un fragmento a otro?
sobes.tech AI
Respuesta de la IA
-
Argumentos del Bundle: Se utilizan para pasar tipos de datos primitivos y objetos que implementan
ParcelableoSerializableal crear una nueva instancia de un fragmento.// En el fragmento que envía val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // En el fragmento que recibe override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... uso de value } -
Shared ViewModel: Los fragmentos que pertenecen a una misma Activity pueden usar un
ViewModelcompartido para intercambiar datos.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // En el fragmento que envía private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // En el fragmento que recibe private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... uso de value } -
Usando interfaz de callback: Un fragmento llama a un método en la Activity, y la Activity luego llama a un método en otro fragmento.
// Interfaz en la Activity o en un archivo separado interface DataTransferListener { fun onDataReceived(data: String) } // En el fragmento que envía (activity as? DataTransferListener)?.onDataReceived("value") // En la Activity que implementa la interfaz override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // En el fragmento que recibe fun updateUI(data: String) { // ... actualización de la UI con los datos } -
API de Resultados de Fragmentos: Método moderno y recomendado para intercambiar datos entre fragmentos.
// En el fragmento que envía (establece el resultado) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // En el fragmento que recibe (escucha el resultado) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... uso del resultado }