Sobes.tech
Junior

Bir fragmandan diğerine nasıl veri aktarılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

  1. Bundle Argümanları: Yeni bir fragment örneği oluşturulurken temel veri tipleri ve Parcelable veya Serializable uygulayan nesnelerin aktarımı için kullanılır.

    // Gönderen fragmentte
    val bundle = Bundle().apply {
        putString("key", "value")
    }
    val fragment = TargetFragment().apply {
        arguments = bundle
    }
    
    // Alan fragmentte
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... value kullanımı
    }
    
  2. Paylaşılan ViewModel: Aynı Activity'ye ait fragmentler, veri alışverişi için ortak bir ViewModel kullanabilir.

    // SharedViewModel
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // Gönderen fragmentte
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.value = "value"
    
    // Alan fragmentte
    private val sharedViewModel: SharedViewModel by activityViewModels()
    sharedViewModel.data.observe(viewLifecycleOwner) { value ->
        // ... value kullanımı
    }
    
  3. Arayüz geri çağırma kullanımı: Bir fragment, Activity'deki bir yöntemi çağırır ve Activity daha sonra başka bir fragmentteki yöntemi çağırır.

    // Activity veya ayrı bir dosyada arayüz
    interface DataTransferListener {
        fun onDataReceived(data: String)
    }
    
    // Gönderen fragmentte
    (activity as? DataTransferListener)?.onDataReceived("value")
    
    // Arayüzü uygulayan Activity'de
    override fun onDataReceived(data: String) {
        val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment
        targetFragment?.updateUI(data)
    }
    
    // Alan fragmentte
    fun updateUI(data: String) {
        // ... UI güncellemesi
    }
    
  4. Fragment Sonuç API'si: Fragmentler arasında veri alışverişi için modern ve önerilen yöntem.

    // Gönderen fragmentte (sonucu ayarlama)
    setFragmentResult("requestKey", bundleOf("bundleKey" to "value"))
    
    // Alan fragmentte (sonucu dinleme)
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... sonuç kullanımı
    }