Junior
Kuidas edastada andmeid ühest fragmentist teise?
sobes.tech AI
Vastus AI-lt
-
Paki argumenti: Kas kasutatakse primitiivsete andmetüüpide ja
ParcelablevõiSerializableteostavate 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 } -
Jagatud ViewModel: Fragmentid, mis kuuluvad samale Activity-le, võivad kasutada ühise
ViewModelandmete 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 } -
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 } -
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 }