Junior
Hoe gegevens van het ene fragment naar het andere overbrengen?
sobes.tech AI
Antwoord van AI
-
Bundle Argumenten: Wordt gebruikt om primitieve datatypes en objecten die
ParcelableofSerializableimplementeren, door te geven bij het maken van een nieuw fragment.// In het verzendende fragment val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // In het ontvangende fragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... gebruik van value } -
Shared ViewModel: Fragmenten die tot dezelfde Activity behoren, kunnen een gedeelde
ViewModelgebruiken om gegevens uit te wisselen.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // In het verzendende fragment private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // In het ontvangende fragment private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... gebruik van value } -
Gebruik van interface callback: Een fragment roept een methode in de Activity aan, en de Activity roept vervolgens een methode in een ander fragment aan.
// Interface in de Activity of in een apart bestand interface DataTransferListener { fun onDataReceived(data: String) } // In het verzendende fragment (activity as? DataTransferListener)?.onDataReceived("value") // In de Activity die de interface implementeert override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // In het ontvangende fragment fun updateUI(data: String) { // ... UI bijwerken met de gegevens } -
Fragment Result API: Moderne en aanbevolen manier om gegevens uit te wisselen tussen fragmenten.
// In het verzendende fragment (resultaat instellen) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // In het ontvangende fragment (resultaat luisteren) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... gebruik van resultaat }