Junior
Comment transmettre des données d'un fragment à un autre?
sobes.tech IA
Réponse de l'IA
-
Arguments du Bundle : Utilisé pour transmettre des types de données primitifs et des objets implémentant
ParcelableouSerializablelors de la création d'une nouvelle instance de fragment.// Dans le fragment émetteur val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // Dans le fragment récepteur override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... utilisation de value } -
ViewModel partagé : Les fragments appartenant à une même Activity peuvent utiliser un
ViewModelcommun pour échanger des données.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Dans le fragment émetteur private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // Dans le fragment récepteur private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... utilisation de value } -
Utilisation d'une interface de rappel : Un fragment appelle une méthode dans l'Activity, puis l'Activity appelle une méthode dans un autre fragment.
// Interface dans l'Activity ou un fichier séparé interface DataTransferListener { fun onDataReceived(data: String) } // Dans le fragment émetteur (activity as? DataTransferListener)?.onDataReceived("value") // Dans l'Activity implémentant l'interface override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // Dans le fragment récepteur fun updateUI(data: String) { // ... mise à jour de l'UI avec les données } -
API de Résultat de Fragment : Méthode moderne et recommandée pour échanger des données entre fragments.
// Dans le fragment émetteur (définir le résultat) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // Dans le fragment récepteur (écouter le résultat) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... utilisation du résultat }