Junior
Bir fragmentdan boshqasiga ma'lumotlarni qanday uzatish mumkin?
sobes.tech AI
AIdan javob
-
Bundle Argumentlari: Yangi fragment nusxasini yaratishda primitiv ma'lumot turlari va
ParcelableyokiSerializableni amalga oshiradigan obyektlarni o'tkazish uchun ishlatiladi.// Yuboruvchi fragmentda val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // Qabul qiluvchi fragmentda override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... value dan foydalanish } -
Umumiy ViewModel: Bir Activity ga tegishli fragmentlar ma'lumot almashish uchun umumiy
ViewModeldan foydalanishi mumkin.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Yuboruvchi fragmentda private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // Qabul qiluvchi fragmentda private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... value dan foydalanish } -
Interfeys callback dan foydalanish: Bir fragment Activity da metodni chaqiradi, va Activity keyin boshqa fragmentda metodni chaqiradi.
// Activity yoki alohida faylda interfeys interface DataTransferListener { fun onDataReceived(data: String) } // Yuboruvchi fragmentda (activity as? DataTransferListener)?.onDataReceived("value") // Interfeysni amalga oshirgan Activityda override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // Qabul qiluvchi fragmentda fun updateUI(data: String) { // ... UI ni yangilash } -
Fragment Result API: Zamonaviy va tavsiya etilgan usul fragmentlar o'rtasida ma'lumot almashish uchun.
// Yuboruvchi fragmentda (natijani o'rnatish) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // Qabul qiluvchi fragmentda (natijani tinglash) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... natijadan foydalanish }