Sobes.tech
Junior

Wie überträgt man Daten von einem Fragment zum anderen?

sobes.tech KI

Antwort von AI

  1. Bundle-Argumente: Wird verwendet, um primitive Datentypen und Objekte, die Parcelable oder Serializable implementieren, 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
    }
    
  2. Shared ViewModel: Fragmente, die zu einer Activity gehören, können ein gemeinsames ViewModel verwenden, 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
    }
    
  3. 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
    }
    
  4. 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
    }