Junior
Hogyan lehet adatokat átvinni egyik fragmentből a másikba?
sobes.tech MI
Válasz az MI-től
-
Bundle Argumentumok: Az primitív típusú adatok és a
ParcelablevagySerializable-t megvalósító objektumok átadására szolgál új fragment példányának létrehozásakor.// A küldő fragmentben val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // A fogadó fragmentben override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... az érték használata } -
Megosztott ViewModel: Az ugyanahhoz az Activity-hez tartozó fragmentek közösen használhatnak egy
ViewModel-t az adatok cseréjéhez.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // A küldő fragmentben private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // A fogadó fragmentben private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... az érték használata } -
Interfész callback használata: Egy fragment meghív egy metódust az Activity-ben, majd az Activity meghív egy másik fragmentben lévő metódust.
// Interfész az Activity-ben vagy külön fájlban interface DataTransferListener { fun onDataReceived(data: String) } // A küldő fragmentben (activity as? DataTransferListener)?.onDataReceived("value") // Az Activity-ben, amely implementálja az interfészt override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // A fogadó fragmentben fun updateUI(data: String) { // ... az UI frissítése az adatokkal } -
Fragment Eredmény API: Modern és ajánlott módszer az adatok cseréjére a fragmentek között.
// A küldő fragmentben (eredmény beállítása) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // A fogadó fragmentben (eredmény figyelése) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... az eredmény használata }