Sobes.tech
Junior

Чӣ гуна маълумотҳоро аз як қисм ба дигарӣ интиқол додан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

  1. Аргументи пакета: Барои интиқол додани намудҳои primitives ва объектҳое, ки Parcelable ё Serializable-ро иҷро мекунанд, ҳангоми эҷоди намунаи нав аз фрагмент истифода мешавад.

    // Дар фрагменти фиристанда
    val bundle = Bundle().apply {
        putString("key", "value")
    }
    val fragment = TargetFragment().apply {
        arguments = bundle
    }
    
    // Дар фрагменти қабулкунанда
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... истифодаи value
    }
    
  2. ViewModel-и умумӣ: Фрагментҳое, ки ба як Activity тааллуқ доранд, метавонанд барои мубодилаи маълумот як ViewModel-ро истифода баранд.

    // SharedViewModel
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // Дар фрагменти фиристанда
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.value = "value"
    
    // Дар фрагменти қабулкунанда
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.observe(viewLifecycleOwner) { value ->
        // ... истифодаи value
    }
    
  3. Истифодаи интерфейс callback: Як фрагмент методро дар Activity даъват мекунад, ва Activity баъдан методро дар дигар фрагмент даъват мекунад.

    // Интерфейс дар Activity ё файли алоҳида
    interface DataTransferListener {
        fun onDataReceived(data: String)
    }
    
    // Дар фрагменти фиристанда
    (activity as? DataTransferListener)?.onDataReceived("value")
    
    // Дар Activity, ки интерфейсро иҷро мекунад
    override fun onDataReceived(data: String) {
        val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment
        targetFragment?.updateUI(data)
    }
    
    // Дар фрагменти қабулкунанда
    fun updateUI(data: String) {
        // ... навсозии UI бо маълумот
    }
    
  4. API-и натиҷаи фрагмент: Роҳи муосир ва тавсияшуда барои мубодилаи маълумот байни фрагментҳо.

    // Дар фрагменти фиристанда (муқаррар кардани натиҷа)
    setFragmentResult("requestKey", bundleOf("bundleKey" to "value"))
    
    // Дар фрагменти қабулкунанда (гӯш кардани натиҷа)
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... истифодаи result
    }