Middle
Enumere todas las formas de transferencia de datos entre fragmentos.
sobes.tech AI
Respuesta de la IA
-
Argumentos del Bundle: La forma más común. Los datos se transmiten en forma de Bundle a través del método
setArguments()del fragmento.// En el fragmento emisor val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... transición a TargetFragment // En el fragmento receptor override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... usar value } -
ViewModel Compartido: Se usa para transmitir datos relacionados con el ciclo de vida de la actividad o de varios fragmentos.
// En el ViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // En ambos fragmentos private val sharedViewModel: SharedViewModel by activityViewModels() // En el fragmento emisor sharedViewModel.data.value = "datos a transmitir" // En el fragmento receptor sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... usar data } -
Interfaces de Callback: El fragmento puede definir una interfaz que la actividad implementa. El fragmento llama a los métodos de esta interfaz, pasando datos a la actividad, que luego puede transmitirlo a otro fragmento.
// Interfaz en el fragmento emisor interface OnDataPass { fun onDataPass(data: String) } // Fragmento emisor private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context debe implementar OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Actividad class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Se asume que TargetFragment tiene el método updateData } } // Fragmento receptor fun updateData(data: String) { // ... actualizar UI o guardar data } -
API de Resultados de Fragmento: Forma moderna de transmitir resultados entre fragmentos, presentada en AndroidX Fragment versión 1.3.0.
// En el fragmento emisor setFragmentResult("requestKey", bundleOf("bundleKey" to "resultado")) // En el fragmento receptor setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... usar result }