Junior
Wie überträgt man Daten von einem Fragment zum anderen?
sobes.tech KI
Antwort von AI
-
Bundle-Argumente: Wird verwendet, um primitive Datentypen und Objekte, die
ParcelableoderSerializableimplementieren, beim Erstellen einer neuen Fragment-Instanz zu übergeben.// Im sendenden Fragment val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // Im empfangenden Fragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... Verwendung von value } -
Shared ViewModel: Fragmente, die zu einer Activity gehören, können ein gemeinsames
ViewModelverwenden, um Daten auszutauschen.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Im sendenden Fragment private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // Im empfangenden Fragment private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... Verwendung von value } -
Verwendung eines Interface-Callbacks: Ein Fragment ruft eine Methode in der Activity auf, und die Activity ruft dann eine Methode in einem anderen Fragment auf.
// Interface in der Activity oder in einer separaten Datei interface DataTransferListener { fun onDataReceived(data: String) } // Im sendenden Fragment (activity as? DataTransferListener)?.onDataReceived("value") // In der Activity, die das Interface implementiert override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // Im empfangenden Fragment fun updateUI(data: String) { // ... UI-Update mit den Daten } -
Fragment Result API: Moderner und empfohlener Weg, um Daten zwischen Fragmenten auszutauschen.
// Im sendenden Fragment (setzt das Ergebnis) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // Im empfangenden Fragment (hört auf das Ergebnis) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... Verwendung des Ergebnisses }