Middle
Énumérez toutes les méthodes de transfert de données entre fragments.
sobes.tech IA
Réponse de l'IA
-
Arguments du Bundle : La méthode la plus courante. Les données sont transmises sous forme de Bundle via la méthode
setArguments()du fragment.// Dans le fragment émetteur val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... transition vers TargetFragment // Dans le fragment récepteur override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... utiliser value } -
ViewModel Partagé : Utilisé pour transmettre des données liées au cycle de vie de l'activité ou de plusieurs fragments.
// Dans le ViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Dans les deux fragments private val sharedViewModel: SharedViewModel by activityViewModels() // Dans le fragment émetteur sharedViewModel.data.value = "données à transmettre" // Dans le fragment récepteur sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... utiliser data } -
Interfaces de Callback : Le fragment peut définir une interface que l'activité implémente. Le fragment appelle les méthodes de cette interface, transmettant des données à l'activité, qui peut ensuite les transmettre à un autre fragment.
// Interface dans le fragment émetteur interface OnDataPass { fun onDataPass(data: String) } // Fragment émetteur private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context doit implémenter OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Activité class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Suppose que TargetFragment a la méthode updateData } } // Fragment récepteur fun updateData(data: String) { // ... mettre à jour l'UI ou sauvegarder data } -
API de Résultat de Fragment : Méthode moderne pour transmettre des résultats entre fragments, introduite dans AndroidX Fragment version 1.3.0.
// Dans le fragment émetteur setFragmentResult("requestKey", bundleOf("bundleKey" to "résultat")) // Dans le fragment récepteur setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... utiliser result }