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:
- 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
}
}
- 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
}
-
EventBus kasutamine (näiteks Otto, EventBus) — avaldamise ja tellimise muster sündmuste vahetamiseks.
-
Andmete edastamine Bundle'i kaudu, kui luuakse fragment — andmete edastamiseks tegevusest fragmenti.
Valik sõltub ülesandest ja rakenduse arhitektuurist.