Middle
Фрагменттер арасында маалыматтарды өткөрүүнүн бардык жолдорун тизмектеңиз.
sobes.tech AI
AIден жооп
-
Бандл аргументтери: Эң кеңири тараган ыкма. Маалыматтар
setArguments()ыкмасы аркылуу фрагментке Бандл түрүндө өткөрүлөт.// Жөнөтүүчү фрагментте val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... TargetFragmentке өтүү // Алып жаткан фрагментте override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... маанини колдонуу } -
Shared ViewModel: Жашоонун цикли менен байланышкан маалыматтарды өткөрүү үчүн колдонулат.
// ViewModelде class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Эки фрагментте private val sharedViewModel: SharedViewModel by activityViewModels() // Жөнөтүүчү фрагментте sharedViewModel.data.value = "жөнөтүлүүчү маалыматтар" // Алып жаткан фрагментте sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... маалыматтарды колдонуу } -
Кайтаруу интерфейстер: Фрагмент интерфейс аныктай алат, аны активдештирүүчү ишке ашырат. Фрагмент бул интерфейс методдорун чакырып, маалыматтарды активдештирүүгө жиберет, ал эми ал кийинчерээк башка фрагментке өткөрө алат.
// Жөнөтүүчү фрагментте интерфейс interface OnDataPass { fun onDataPass(data: String) } // Жөнөтүүчү фрагмент private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context OnDataPassти ишке ашырышы керек") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Ишке ашыруу class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // updateData ыкмасы бар деп болжонууда } } // Алып жаткан фрагмент fun updateData(data: String) { // ... UI жаңыртуу же маалымат сактоо } -
Fragment Result API: Modern ыкма фрагменттер ортосундагы натыйжаларды өткөрүү үчүн, AndroidX Fragment версиясы 1.3.0да киргизилген.
// Жөнөтүүчү фрагментте setFragmentResult("requestKey", bundleOf("bundleKey" to "жыйынтык")) // Алып жаткан фрагментте setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... натыйжаны колдонуу }