Sobes.tech
Junior

Hoe gegevens van het ene fragment naar het andere overbrengen?

sobes.tech AI

Antwoord van AI

  1. Bundle Argumenten: Wordt gebruikt om primitieve datatypes en objecten die Parcelable of Serializable implementeren, door te geven bij het maken van een nieuw fragment.

    // In het verzendende fragment
    val bundle = Bundle().apply {
        putString("key", "value")
    }
    val fragment = TargetFragment().apply {
        arguments = bundle
    }
    
    // In het ontvangende fragment
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... gebruik van value
    }
    
  2. Shared ViewModel: Fragmenten die tot dezelfde Activity behoren, kunnen een gedeelde ViewModel gebruiken om gegevens uit te wisselen.

    // SharedViewModel
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // In het verzendende fragment
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.value = "value"
    
    // In het ontvangende fragment
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.observe(viewLifecycleOwner) { value ->
        // ... gebruik van value
    }
    
  3. Gebruik van interface callback: Een fragment roept een methode in de Activity aan, en de Activity roept vervolgens een methode in een ander fragment aan.

    // Interface in de Activity of in een apart bestand
    interface DataTransferListener {
        fun onDataReceived(data: String)
    }
    
    // In het verzendende fragment
    (activity as? DataTransferListener)?.onDataReceived("value")
    
    // In de Activity die de interface implementeert
    override fun onDataReceived(data: String) {
        val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment
        targetFragment?.updateUI(data)
    }
    
    // In het ontvangende fragment
    fun updateUI(data: String) {
        // ... UI bijwerken met de gegevens
    }
    
  4. Fragment Result API: Moderne en aanbevolen manier om gegevens uit te wisselen tussen fragmenten.

    // In het verzendende fragment (resultaat instellen)
    setFragmentResult("requestKey", bundleOf("bundleKey" to "value"))
    
    // In het ontvangende fragment (resultaat luisteren)
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... gebruik van resultaat
    }