Sobes.tech
Middle

Ҳама усулҳои интиқоли маълумот байни қисмҳоро номбар кунед.

sobes.tech AI

Ҷавоб аз AI

  1. Аргументии буфери: Роҳи маъмултарин. Маълумотҳо тавассути Bundle тавассути усули setArguments() ба фрагмент дода мешаванд.

    // Дар фрагменти-пешниҳод
    val bundle = Bundle()
    bundle.putString("key", "value")
    val targetFragment = TargetFragment()
    targetFragment.arguments = bundle
    // ... гузаштан ба TargetFragment
    
    // Дар фрагменти-гиранда
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... истифодаи арзиш
    }
    
  2. Shared ViewModel: Барои интиқоли маълумотҳое, ки бо давраи ҳаёти фаъолият ё чанд фрагмент алоқаманданд, истифода мешавад.

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

    // Интерфейс дар фрагменти-пешниҳод
    interface OnDataPass {
        fun onDataPass(data: String)
    }
    
    // Фрагменти-пешниҳод
    private var dataPasser: OnDataPass? = null
    
    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is OnDataPass) {
            dataPasser = context
        } else {
            throw RuntimeException("$context бояд OnDataPass-ро иҷро кунад")
        }
    }
    
    fun passData(data: String) {
        dataPasser?.onDataPass(data)
    }
    
    // Фаъолият
    class MainActivity : AppCompatActivity(), OnDataPass {
        override fun onDataPass(data: String) {
            val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment
            targetFragment?.updateData(data) // Методи updateData дар TargetFragment
        }
    }
    
    // Фрагменти қабулкунанда
    fun updateData(data: String) {
        // ... навсозии UI ё нигоҳ доштани маълумот
    }
    
  4. API-и натиҷаи фрагмент: Роҳи муосир барои интиқоли натиҷаҳо байни фрагментҳо, ки дар AndroidX Fragment версияи 1.3.0 муаррифӣ шудааст.

    // Дар фрагменти-пешниҳод
    setFragmentResult("requestKey", bundleOf("bundleKey" to "натича"))
    
    // Дар фрагменти-гиранда
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... истифодаи натиҷа
    }