Middle
Fərqlər arasında məlumatların ötürülməsinin bütün yollarını sadalayın.
sobes.tech Süni İntellekt
AI-dan cavab
-
Bundle arqumentləri: Ən yaygın üsul. Məlumatlar
setArguments()metodu ilə Bundle şəklində fragmentə ötürülür.// Göndərən fragmentdə val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... TargetFragment-ə keçid // Qəbul edən fragmentdə override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... dəyərdən istifadə et } -
Paylaşılan ViewModel: Aktivlik və ya bir neçə fragmentin həyat dövrü ilə əlaqəli məlumatların ötürülməsi üçün istifadə olunur.
// ViewModel-də class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Hər iki fragmentdə private val sharedViewModel: SharedViewModel by activityViewModels() // Göndərən fragmentdə sharedViewModel.data.value = " ötürüləcək məlumatlar" // Qəbul edən fragmentdə sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... məlumatdan istifadə et } -
Callback interfeysləri: Fragment, aktivlik tərəfindən həyata keçirilən interfeysı təyin edə bilər. Fragment, bu interfeys metodlarını çağıraraq məlumatları aktivliyə ötürür və aktivlik, onları başqa bir fragmente ötürə bilər.
// Göndərən fragmentdə interfeys interface OnDataPass { fun onDataPass(data: String) } // Göndərən fragmentdə private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context OnDataPass-i həyata keçirməlidir") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Aktivlik class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Farz edək ki, TargetFragment-də updateData metodu var } } // Qəbul edən fragment fun updateData(data: String) { // ... UI-ni yenilə və ya data saxla } -
Fragment Result API: Fragmentlər arasında nəticələri ötürmək üçün müasir üsul, AndroidX Fragment versiya 1.3.0-da təqdim olunub.
// Göndərən fragmentdə setFragmentResult("requestKey", bundleOf("bundleKey" to "nəticə")) // Qəbul edən fragmentdə setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... nəticədən istifadə et }