Sobes.tech
Junior

Kuidas edastada andmeid ühest fragmentist teise?

sobes.tech AI

Vastus AI-lt

  1. Paki argumenti: Kas kasutatakse primitiivsete andmetüüpide ja Parcelable või Serializable teostavate objektide edastamiseks, kui luuakse uus fragmenti näide.

    // Saadva fragmenti juures
    val bundle = Bundle().apply {
        putString("key", "value")
    }
    val fragment = TargetFragment().apply {
        arguments = bundle
    }
    
    // Vastuvõtva fragmenti juures
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... väärtuse kasutamine
    }
    
  2. Jagatud ViewModel: Fragmentid, mis kuuluvad samale Activity-le, võivad kasutada ühise ViewModel andmete vahetamiseks.

    // SharedViewModel
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // Saadva fragmenti juures
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.value = "value"
    
    // Vastuvõtva fragmenti juures
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.observe(viewLifecycleOwner) { value ->
        // ... väärtuse kasutamine
    }
    
  3. Interfeisi tagasiside kasutamine: Üks fragment kutsub Activity meetodi välja, ja Activity seejärel kutsub teise fragmenti meetodi välja.

    // Interfeis Activitys või eraldi failis
    interface DataTransferListener {
        fun onDataReceived(data: String)
    }
    
    // Saadva fragmenti juures
    (activity as? DataTransferListener)?.onDataReceived("value")
    
    // Activitys, mis rakendab interfeisi
    override fun onDataReceived(data: String) {
        val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment
        targetFragment?.updateUI(data)
    }
    
    // Vastuvõtva fragmenti juures
    fun updateUI(data: String) {
        // ... UI uuendamine
    }
    
  4. Fragmentide tulemusteenus API: Kaasaegne ja soovitatav viis andmete vahetamiseks fragmentide vahel.

    // Saadva fragmenti juures (tulemuse seadmine)
    setFragmentResult("requestKey", bundleOf("bundleKey" to "value"))
    
    // Vastuvõtva fragmenti juures (tulemuse kuulamine)
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... tulemuse kasutamine
    }