Middle
Noem alle manieren van gegevensoverdracht tussen fragmenten.
sobes.tech AI
Antwoord van AI
-
Bundle-argumenten: De meest gebruikte methode. Gegevens worden als Bundle doorgegeven via de methode
setArguments()van het fragment.// In het verzendende fragment val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... overgang naar TargetFragment // In het ontvangende fragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... gebruik value } -
Shared ViewModel: Wordt gebruikt om gegevens over te dragen die gerelateerd zijn aan de levenscyclus van de activiteit of meerdere fragmenten.
// In het ViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // In beide fragmenten private val sharedViewModel: SharedViewModel by activityViewModels() // In het verzendende fragment sharedViewModel.data.value = "gegevens om over te dragen" // In het ontvangende fragment sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... gebruik data } -
Callback-interfaces: Het fragment kan een interface definiëren die de activiteit implementeert. Het fragment roept de methoden van deze interface aan, waarbij gegevens worden doorgegeven aan de activiteit, die ze vervolgens aan een ander fragment kan doorgeven.
// Interface in het verzendende fragment interface OnDataPass { fun onDataPass(data: String) } // Verzendend fragment private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context moet OnDataPass implementeren") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Activiteit class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Veronderstelt dat TargetFragment een updateData-methode heeft } } // Ontvangend fragment fun updateData(data: String) { // ... UI bijwerken of data opslaan } -
Fragment Result API: Moderne manier om resultaten tussen fragmenten over te dragen, geïntroduceerd in AndroidX Fragment versie 1.3.0.
// In het verzendende fragment setFragmentResult("requestKey", bundleOf("bundleKey" to "resultaat")) // In het ontvangende fragment setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... gebruik result }