Junior
Бир бөлүмдөн экинчи бөлүмгө маалыматтарды кантип өткөрүү керек?
sobes.tech AI
AIден жооп
-
Бандл аргументтери: Жаңы фрагменттин экземплярин түзүүдө primitive түрлөрүн жана
ParcelableжеSerializableишке ашырган объекттерди өткөрүү үчүн колдонулат.// Жөнөтүүчү фрагментте val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // Алууучу фрагментте override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... маанини колдонуу } -
Бөлүштүрүлгөн ViewModel: Бир Activityге тиешелүү фрагменттер маалымат алмашуу үчүн жалпы
ViewModelколдонушу мүмкүн.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Жөнөтүүчү фрагментте private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // Алууучу фрагментте private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... маанини колдонуу } -
Интерфейс callback колдонуу: Бир фрагмент Activityнин ыкмасын чакырып, ал андан башка фрагменттин ыкмасын чакырат.
// Интерфейс Activity же өзүнчө файлда interface DataTransferListener { fun onDataReceived(data: String) } // Жөнөтүүчү фрагментте (activity as? DataTransferListener)?.onDataReceived("value") // Интерфейсти ишке ашырган Activityде override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // Алууучу фрагментте fun updateUI(data: String) { // ... UI жаңыртуу } -
Фрагменттин натыйжасы API: Заманауи жана сунушталган ыкма фрагменттер ортосунда маалымат алмашуу үчүн.
// Жөнөтүүчү фрагментте (натыйжаны орнотуу) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // Алууучу фрагментте (натыйжаны угуу) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... натыйжаны колдонуу }