Sobes.tech
Middle

Fragmanlar arasında veri iletmenin tüm yollarını listeleyin.

sobes.tech yapay zeka

AI'dan gelen yanıt

  1. Bundle Argümanları: En yaygın yöntem. Veriler, setArguments() yöntemiyle bir Bundle olarak fragmente aktarılır.

    // Gönderici fragmentte
    val bundle = Bundle()
    bundle.putString("key", "value")
    val targetFragment = TargetFragment()
    targetFragment.arguments = bundle
    // ... TargetFragment'e geçiş
    
    // Alıcı fragmentte
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... değeri kullan
    }
    
  2. Paylaşılan ViewModel: Aktivitenin veya birkaç fragmentin yaşam döngüsüyle ilgili verileri iletmek için kullanılır.

    // ViewModel'de
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // Her iki fragmentte
    private val sharedViewModel: SharedViewModel by activityViewModels()
    
    // Gönderici fragmentte
    sharedViewModel.data.value = "iletilecek veriler"
    
    // Alıcı fragmentte
    sharedViewModel.data.observe(viewLifecycleOwner) { data ->
        // ... veriyi kullan
    }
    
  3. Callback Arayüzleri: Fragment, aktivitenin uyguladığı bir arayüz tanımlayabilir. Fragment, bu arayüzün metodlarını çağırarak verileri aktiviteye iletir ve aktivite, bunları başka bir fragmente aktarabilir.

    // Gönderici fragmentte arayüz
    interface OnDataPass {
        fun onDataPass(data: String)
    }
    
    // Gönderici fragmentte
    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 uygulamalı")
        }
    }
    
    fun passData(data: String) {
        dataPasser?.onDataPass(data)
    }
    
    // Aktivite
    class MainActivity : AppCompatActivity(), OnDataPass {
        override fun onDataPass(data: String) {
            val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment
            targetFragment?.updateData(data) // TargetFragment'ta updateData metodu varsayılır
        }
    }
    
    // Alıcı fragment
    fun updateData(data: String) {
        // ... UI'yi güncelle veya veriyi kaydet
    }
    
  4. Fragment Sonuç API'si: Fragmentler arasında sonuç iletmek için modern yöntem, AndroidX Fragment sürüm 1.3.0 ile tanıtılmıştır.

    // Gönderici fragmentte
    setFragmentResult("requestKey", bundleOf("bundleKey" to "sonuç"))
    
    // Alıcı fragmentte
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... sonucu kullan
    }