Sobes.tech
Middle

Fragmentlar o'rtasida ma'lumot uzatishning barcha usullarini ro'yxatlang.

sobes.tech AI

AIdan javob

  1. Bundle argumentlari: Eng keng tarqalgan usul. Ma'lumotlar setArguments() metodidan foydalanib, Bundle shaklida yuboriladi.

    // Yuboruvchi fragmentda
    val bundle = Bundle()
    bundle.putString("key", "value")
    val targetFragment = TargetFragment()
    targetFragment.arguments = bundle
    // ... TargetFragmentga o'tish
    
    // Qabul qiluvchi fragmentda
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... qiymatdan foydalanamiz
    }
    
  2. Ulashilgan ViewModel: Faoliyat yoki bir nechta fragmentlarning hayot aylanishiga bog'liq ma'lumotlarni uzatish uchun ishlatiladi.

    // ViewModelda
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // Ikkala fragmentda
    private val sharedViewModel: SharedViewModel by activityViewModels()
    
    // Yuboruvchi fragmentda
    sharedViewModel.data.value = "uzatiladigan ma'lumotlar"
    
    // Qabul qiluvchi fragmentda
    sharedViewModel.data.observe(viewLifecycleOwner) { data ->
        // ... ma'lumotdan foydalanamiz
    }
    
  3. Callback interfeyslari: Fragment, faoliyat tomonidan amalga oshiriladigan interfeysni aniqlashi mumkin. Fragment, bu interfeys metodlarini chaqirib, ma'lumotlarni faoliyatga uzatadi va faoliyat, ularni boshqa fragmentga o'tkazishi mumkin.

    // Yuboruvchi fragmentda interfeys
    interface OnDataPass {
        fun onDataPass(data: String)
    }
    
    // Yuboruvchi fragmentda
    private var dataPasser: OnDataPass? = null
    
    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is OnDataPass) {
            dataPasser = context
        } else {
            throw RuntimeException("$context OnDataPassni amalga oshirmoqda")
        }
    }
    
    fun passData(data: String) {
        dataPasser?.onDataPass(data)
    }
    
    // Faoliyat
    class MainActivity : AppCompatActivity(), OnDataPass {
        override fun onDataPass(data: String) {
            val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment
            targetFragment?.updateData(data) // TargetFragmentda updateData metodi mavjud deb faraz qilamiz
        }
    }
    
    // Qabul qiluvchi fragment
    fun updateData(data: String) {
        // ... UI ni yangilash yoki ma'lumotni saqlash
    }
    
  4. Fragment Result API: Fragmentlar o'rtasida natijalarni uzatish uchun zamonaviy usul, AndroidX Fragment versiya 1.3.0 da taqdim etilgan.

    // Yuboruvchi fragmentda
    setFragmentResult("requestKey", bundleOf("bundleKey" to "natija"))
    
    // Qabul qiluvchi fragmentda
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... natijadan foydalanamiz
    }