Middle
Nennen Sie alle Möglichkeiten der Datenübertragung zwischen Fragmenten.
sobes.tech KI
Antwort von AI
-
Bundle-Argumente: Die gebräuchlichste Methode. Daten werden als Bundle über die Methode
setArguments()des Fragments übergeben.// Im sendenden Fragment val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... Übergang zu TargetFragment // Im empfangenden Fragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... Wert verwenden } -
Shared ViewModel: Wird verwendet, um Daten zu übertragen, die mit dem Lebenszyklus der Aktivität oder mehrerer Fragmente verbunden sind.
// Im ViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // In beiden Fragmenten private val sharedViewModel: SharedViewModel by activityViewModels() // Im sendenden Fragment sharedViewModel.data.value = "zu übertragende Daten" // Im empfangenden Fragment sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... Daten verwenden } -
Callback-Interfaces: Das Fragment kann eine Schnittstelle definieren, die die Aktivität implementiert. Das Fragment ruft die Methoden dieser Schnittstelle auf und übergibt Daten an die Aktivität, die sie dann an ein anderes Fragment weitergeben kann.
// Schnittstelle im sendenden Fragment interface OnDataPass { fun onDataPass(data: String) } // Sendendes Fragment private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context muss OnDataPass implementieren") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Aktivität class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Annahme: TargetFragment hat die Methode updateData } } // Empfangendes Fragment fun updateData(data: String) { // ... UI aktualisieren oder Daten speichern } -
Fragment-Ergebnis-API: Moderner Weg, um Ergebnisse zwischen Fragmenten zu übertragen, eingeführt in AndroidX Fragment Version 1.3.0.
// Im sendenden Fragment setFragmentResult("requestKey", bundleOf("bundleKey" to "Ergebnis")) // Im empfangenden Fragment setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... Ergebnis verwenden }