Junior
Ինչպե՞ս փոխանցել տվյալները մեկ հատվածից մյուսը:
sobes.tech AI
Պատասխան AI-ից
-
Բանդլի պնդումներ: Օգտագործվում է 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") // ... օգտագործում արժեքը } -
Համատեղ 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 -> // ... օգտագործում արժեքը } -
Ինտերֆեյս 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-ի թարմացում տվյալներով } -
Ֆրագմենտի արդյունքի API: Ժամանակակից և առաջարկվող մեթոդը ֆրագմենտների միջև տվյալների փոխանակման համար:
// Ուղարկող ֆրագմենտում (նստեցնում ենք արդյունքը) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // Ստացող ֆրագմենտում (լսում ենք արդյունքը) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... օգտագործում result }