Sobes.tech
Junior

Hogyan lehet adatokat átvinni egyik fragmentből a másikba?

sobes.tech MI

Válasz az MI-től

  1. Bundle Argumentumok: Az primitív típusú adatok és a Parcelable vagy Serializable-t megvalósító objektumok átadására szolgál új fragment példányának létrehozásakor.

    // A küldő fragmentben
    val bundle = Bundle().apply {
        putString("key", "value")
    }
    val fragment = TargetFragment().apply {
        arguments = bundle
    }
    
    // A fogadó fragmentben
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... az érték használata
    }
    
  2. Megosztott ViewModel: Az ugyanahhoz az Activity-hez tartozó fragmentek közösen használhatnak egy ViewModel-t az adatok cseréjéhez.

    // SharedViewModel
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // A küldő fragmentben
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.value = "value"
    
    // A fogadó fragmentben
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.observe(viewLifecycleOwner) { value ->
        // ... az érték használata
    }
    
  3. Interfész callback használata: Egy fragment meghív egy metódust az Activity-ben, majd az Activity meghív egy másik fragmentben lévő metódust.

    // Interfész az Activity-ben vagy külön fájlban
    interface DataTransferListener {
        fun onDataReceived(data: String)
    }
    
    // A küldő fragmentben
    (activity as? DataTransferListener)?.onDataReceived("value")
    
    // Az Activity-ben, amely implementálja az interfészt
    override fun onDataReceived(data: String) {
        val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment
        targetFragment?.updateUI(data)
    }
    
    // A fogadó fragmentben
    fun updateUI(data: String) {
        // ... az UI frissítése az adatokkal
    }
    
  4. Fragment Eredmény API: Modern és ajánlott módszer az adatok cseréjére a fragmentek között.

    // A küldő fragmentben (eredmény beállítása)
    setFragmentResult("requestKey", bundleOf("bundleKey" to "value"))
    
    // A fogadó fragmentben (eredmény figyelése)
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... az eredmény használata
    }