Junior
Kako preneti podatke iz jednog fragmenta u drugi?
sobes.tech АИ
Одговор од АИ
-
Argumenti paketa: Koristi se za prenos primitivnih tipova podataka i objekata koji implementiraju
ParcelableiliSerializable, prilikom kreiranja novog primera fragmenta.// U fragmentu koji šalje val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // U fragmentu koji prima override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... korišćenje value } -
Shared ViewModel: Fragmenti koji pripadaju istoj Activity mogu koristiti zajednički
ViewModelza razmenu podataka.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // U fragmentu koji šalje private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // U fragmentu koji prima private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... korišćenje value } -
Korišćenje interfejs callback-a: Jedan fragment poziva metodu u Activity, a Activity zatim poziva metodu u drugom fragmentu.
// Interfejs u Activity ili posebnoj datoteci interface DataTransferListener { fun onDataReceived(data: String) } // U fragmentu koji šalje (activity as? DataTransferListener)?.onDataReceived("value") // U Activity-ju koji implementira interfejs override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // U fragmentu koji prima fun updateUI(data: String) { // ... ažuriranje UI sa podacima } -
Fragment Result API: Savremeni i preporučeni način za razmenu podataka između fragmenata.
// U fragmentu koji šalje (postavljamo rezultat) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // U fragmentu koji prima (slušamo rezultat) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... korišćenje result }