Observació de LiveData des de la UI¶
Mètode observe() i el LifecycleOwner¶
El mètode observe() és la forma principal d'observar LiveData des dels components de UI. Requereix dos paràmetres: un LifecycleOwner i un Observer.
Signatura del mètode:
fun observe(owner: LifecycleOwner, observer: Observer<T>)
Components:
- LifecycleOwner: Component amb cicle de vida (Activity, Fragment)
- Observer: Lambda o classe que rep les actualitzacions
A Activity:
class MainActivity : AppCompatActivity() {
private val viewModel: DadesViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 'this' és el LifecycleOwner (Activity)
viewModel.dades.observe(this) { dades ->
// Actualitzar UI amb les noves dades
textView.text = dades
}
}
}
class MeuFragment : Fragment() {
private val viewModel: DadesViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//CORRECTE: usar viewLifecycleOwner
viewModel.dades.observe(viewLifecycleOwner) { dades ->
textView.text = dades
}
//INCORRECTE: NO usar 'this' en Fragments
// viewModel.dades.observe(this) { ... } // Pot causar memory leaks!
}
}
Els Fragments tenen DOS cicles de vida: el del Fragment i el de la View La View pot destruir-se i recrear-se mentre el Fragment segueix viu. Usar this pot causar que l'observer segueixi actiu quan la View ja no existeix viewLifecycleOwner s'atura quan la View es destrueix, evitant fugues de memòria (memory leaks).