Middle
Fragmanlar arasında veri iletmenin tüm yollarını listeleyin.
sobes.tech yapay zeka
AI'dan gelen yanıt
-
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 } -
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 } -
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 } -
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 }