Middle
Sorolja fel az összes adatátviteli módot a fragmentumok között.
sobes.tech MI
Válasz az MI-től
-
Csomag argumentumok: A leggyakoribb módszer. Az adatok Bundle-ben kerülnek átadásra a
setArguments()módszerrel a fragmentben.// A küldő fragmentben val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... átmenet a TargetFragmenthez // A fogadó fragmentben override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... használjuk az értéket } -
Shared ViewModel: Az aktivitás vagy több fragment életciklusához kapcsolódó adatok átadására szolgál.
// A ViewModel-ben class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Mindkét fragmentben private val sharedViewModel: SharedViewModel by activityViewModels() // A küldő fragmentben sharedViewModel.data.value = "átadott adatok" // A fogadó fragmentben sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... használjuk az adatot } -
Callback interfészek: A fragment meghatározhat egy interfészt, amelyet az aktivitás implementál. A fragment meghívja ennek az interfésznek a módszereit, átadva az adatokat az aktivitásnak, amely később átadhatja azokat egy másik fragmentnek.
// Az interfész a küldő fragmentben interface OnDataPass { fun onDataPass(data: String) } // A küldő fragment private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context-nek implementálnia kell az OnDataPass-t") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Az aktivitás class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Feltételezett updateData metódus a TargetFragmentben } } // A fogadó fragment fun updateData(data: String) { // ... frissítjük a UI-t vagy tároljuk az adatot } -
Fragment Eredmény API: A modern módszer eredmények átadására a fragmentek között, az AndroidX Fragment 1.3.0 verziójától.
// A küldő fragmentben setFragmentResult("requestKey", bundleOf("bundleKey" to "eredmény")) // A fogadó fragmentben setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... használjuk az eredményt }