Sobes.tech
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

  1. 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
    }
    
  2. 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
    }
    
  3. 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
    }
    
  4. 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
    }