Sobes.tech
Junior

Bir fraqmentdən digərinə məlumatların necə ötürülməsi?

sobes.tech Süni İntellekt

AI-dan cavab

  1. Bundle arqumentləri: Yeni fragment nümunəsi yaradılarkən primitiv məlumat tiplərini və Parcelable və ya Serializable tətbiq edən obyektləri ötürmək üçün istifadə olunur.

    // Göndərən fragmentdə
    val bundle = Bundle().apply {
        putString("key", "value")
    }
    val fragment = TargetFragment().apply {
        arguments = bundle
    }
    
    // Qəbul edən fragmentdə
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... value istifadə
    }
    
  2. Paylaşılan ViewModel: Eyni Activity-ə aid fragmentlər məlumat mübadiləsi üçün ümumi ViewModel istifadə edə bilər.

    // SharedViewModel
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // Göndərən fragmentdə
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.value = "value"
    
    // Qəbul edən fragmentdə
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.observe(viewLifecycleOwner) { value ->
        // ... value istifadə
    }
    
  3. İnterfeys callback istifadə edərək: Bir fragment Activity-də bir metodu çağırır və Activity daha sonra başqa bir fragmentdəki metodu çağırır.

    // Activity-də və ya ayrıca faylda interfeys
    interface DataTransferListener {
        fun onDataReceived(data: String)
    }
    
    // Göndərən fragmentdə
    (activity as? DataTransferListener)?.onDataReceived("value")
    
    // İnterfeysi həyata keçirən Activity-də
    override fun onDataReceived(data: String) {
        val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment
        targetFragment?.updateUI(data)
    }
    
    // Qəbul edən fragmentdə
    fun updateUI(data: String) {
        // ... UI-ni yeniləyin
    }
    
  4. Fragment Result API: Fragmentlər arasında məlumat mübadiləsi üçün müasir və tövsiyə olunan üsul.

    // Göndərən fragmentdə (nəticəni qurmaq)
    setFragmentResult("requestKey", bundleOf("bundleKey" to "value"))
    
    // Qəbul edən fragmentdə (nəticəni dinləmək)
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... nəticədən istifadə
    }