Sobes.tech
Middle

Kuidas korraldada tegevuse ja fragmenti vahelist suhtlust?

sobes.tech AI

Vastus AI-lt

Androidi tegevuse ja fragmendi vahelise suhtluse korraldamiseks on mitu võimalust:

  1. Kasutades liideseid. Fragment deklareerib liidese koos tagasiside meetoditega, mida rakendab tegevus. Fragment kutsub liidese meetodeid, et edastada andmeid või sündmusi tegevusele.
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) {
        // Andmete töötlemine fragmentist
    }
}
  1. Kasutades ViewModeli tegevuse elutsükliga. Ühine ViewModel võimaldab tegevusel ja fragmentil vahetada andmeid LiveData kaudu.
class SharedViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// Aktiivsuses ja fragmentis
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)

// Fragment uuendab andmeid
model.data.value = "Uus väärtus"

// Tegevus jälgib muudatusi
model.data.observe(this) { value ->
    // Andmete töötlemine
}
  1. EventBus kasutamine (näiteks Otto, EventBus) — avaldamise ja tellimise muster sündmuste vahetamiseks.

  2. Andmete edastamine Bundle'i kaudu, kui luuakse fragment — andmete edastamiseks tegevusest fragmenti.

Valik sõltub ülesandest ja rakenduse arhitektuurist.