Sobes.tech
Junior

Cum se transferă datele dintr-un fragment în altul?

sobes.tech AI

Răspuns de la AI

  1. Argumente de Bundle: Folosite pentru transmiterea tipurilor primitive de date și a obiectelor care implementează Parcelable sau Serializable atunci când se creează o nouă instanță de fragment.

    // În fragmentul care trimite
    val bundle = Bundle().apply {
        putString("key", "value")
    }
    val fragment = TargetFragment().apply {
        arguments = bundle
    }
    
    // În fragmentul care primește
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... utilizarea valorii
    }
    
  2. ViewModel partajat: Fragmentelor care aparțin aceleiași Activity le poate fi folosit un ViewModel comun pentru schimbul de date.

    // SharedViewModel
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // În fragmentul care trimite
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.value = "value"
    
    // În fragmentul care primește
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.observe(viewLifecycleOwner) { value ->
        // ... utilizarea valorii
    }
    
  3. Utilizarea unei interfețe callback: Un fragment apelează o metodă în Activity, iar Activity apoi apelează o metodă în alt fragment.

    // Interfață în Activity sau într-un fișier separat
    interface DataTransferListener {
        fun onDataReceived(data: String)
    }
    
    // În fragmentul care trimite
    (activity as? DataTransferListener)?.onDataReceived("value")
    
    // În Activity care implementează interfața
    override fun onDataReceived(data: String) {
        val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment
        targetFragment?.updateUI(data)
    }
    
    // În fragmentul care primește
    fun updateUI(data: String) {
        // ... actualizarea UI cu datele
    }
    
  4. API-ul de rezultate al fragmentului: Mod modern și recomandat pentru schimbul de date între fragmente.

    // În fragmentul care trimite (setarea rezultatului)
    setFragmentResult("requestKey", bundleOf("bundleKey" to "value"))
    
    // În fragmentul care primește (ascultă rezultatul)
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... utilizarea rezultatului
    }