Sobes.tech
Middle

Activity va fragment o'rtasidagi o'zaro ta'sirni qanday tashkil qilish mumkin?

sobes.tech AI

AIdan javob

Androidда Activity ва фрагмент ўртасидаги ўзаро таъсирлашиш бир неча усулда ташкил этилиши мумкин:

  1. Интерфейслар орқали. Фрагмент қайтаримли методлар билан интерфейс эълон қилади, уни Activity амалга оширади. Фрагмент бу методларни чақириб, маълумотлар ёки ҳодисаларни Activityга ўтказади.
class MyFragment : Fragment() {
    interface OnDataPass {
        fun onDataPass(data: String)
    }

    private lateinit var dataPasser: OnDataPass

    override fun onAttach(context: Context) {
        super.onAttach(context)
        dataPasser = context as OnDataPass
    }

    fun passData(data: String) {
        dataPasser.onDataPass(data)
    }
}

class MyActivity : AppCompatActivity(), MyFragment.OnDataPass {
    override fun onDataPass(data: String) {
        // Фрагментдан олинган маълумотларни ишлаш
    }
}
  1. ViewModelдан фойдаланиш ва Activityнинг ҳаёт цикллари билан. Умумий ViewModel Activity ва фрагмент ўртасида маълумот алмашиш учун LiveData орқали фойдаланилади.
class SharedViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// Activity ва фрагментда
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)

// Фрагмент маълумотларни янгилайди
model.data.value = "Янги қиймат"

// Activity ўзгаришларни кузатади
model.data.observe(this) { value ->
    // Қийматни ишлаш
}
  1. EventBusдан фойдаланиш (масалан, Otto, EventBus) — ҳодисалар алмашинуви учун нашр-ёзиш модели.

  2. Фрагментни яратишда аргументларни Bundle орқали ўтказиш — Activityдан фрагментга маълумотлар ўтказиш учун.

Тўғри усул танлаш вазифа ва дастур архитектурасига боғлиқ.