Sobes.tech
Middle

Kaip organizuoti sąveiką tarp Activity ir fragmento?

sobes.tech AI

Atsakymas iš AI

Veiksmų sąveika tarp Activity ir fragmento Android gali būti organizuota keliais būdais:

  1. Per sąsajas. Fragmentas deklaruoja sąsają su atgalinio skambučio metodais, kuriuos įgyvendina Activity. Fragmentas kviečia šiuos metodus perduoti duomenis ar įvykius į 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) {
        // Apdoroti duomenis iš fragmento
    }
}
  1. Naudojant ViewModel su Activity gyvavimo ciklu. Bendras ViewModel leidžia Activity ir fragmentui keistis duomenimis per LiveData.
class SharedViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// Activity ir fragmente
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)

// Fragment atnaujina duomenis
model.data.value = "Nauja reikšmė"

// Activity stebi pokyčius
model.data.observe(this) { value ->
    // Duomenų apdorojimas
}
  1. Naudojant EventBus (pvz., Otto, EventBus) — publikavimo-prenumeravimo modelis įvykių keitimui.

  2. Perduodant argumentus per Bundle, kuriant fragmentą — duomenų perdavimas iš Activity į fragmentą.

Pasirinktas metodas priklauso nuo užduoties ir programos architektūros.