Sobes.tech
Junior

Ինչպե՞ս փոխանցել տվյալները մեկ հատվածից մյուսը:

sobes.tech AI

Պատասխան AI-ից

  1. Բանդլի պնդումներ: Օգտագործվում է primitív տիպերի տվյալների և 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")
        // ... օգտագործում արժեքը
    }
    
  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 ->
        // ... օգտագործում արժեքը
    }
    
  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
    }