No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

4D
21H
59M
16S

C贸mo implementar observer en el proyecto

21/32
Recursos

Aportes 7

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Me propuse como reto hacer lo que dice el profesor: que las interfaces sean gen茅ricas para que nosotros podamos usarla con cualquier tipo de dato. Simplemente fue cuesti贸n de modificarlas de esta manera:

interface Observable2<T> {
    fun addObserver(observer: Observer2<T>)
    fun removeObserver(observer: Observer2<T>)
    fun notifyObservers(newValue: T?)
}
interface Observer2<T> {
    fun notifyChange(newValue: T?)
}

Tambi茅n me propuse a帽adir la funcionalidad de eliminar todos los observers autom谩ticamente cuando el Fragment se destruye, tal y como lo hace LiveData. La clase qued贸 de esta manera:

class AvailableBalanceObservable<T>(lifecycleOwner: LifecycleOwner) : Observable2<T>
    init {
        lifecycleOwner.lifecycle.addObserver(object : LifecycleObserver {
            @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
            fun removeAllObservers() {
                amountObserverList.clear()
                lifecycleOwner.lifecycle.removeObserver(this)
            }
        })
    }
    // Resto del c贸digo
}

Un LifecycleOwner es una interfaz que implementan todas las clases que tienen un ciclo de vida, en este caso un Fragment, pero tambi茅n puede ser una Activity. En mi implementaci贸n, al iniciar la clase, se a帽ade un observador al ciclo de vida del Fragment. Cuando el Fragment ejecuta onDestroy(), se eliminan todos los observers de la lista y se elimina el propio observer del ciclo de vida.

Finalmente, para construir la clase, basta con llamarla as铆:

class HomeFragment : Fragment(), HomeContract.View {
    private lateinit var availableBalanceObservable: AvailableBalanceObservable<Double>
    // Resto del c贸digo...

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        // Resto del c贸digo...
        availableBalanceObservable = AvailableBalanceObservable(viewLifecycleOwner)
    }
}

Con estos dos cambios, la clase tiene m谩s funcionalidades y est谩 m谩s cerca a la implementaci贸n de LiveData

Ciclo de Vida de Una Actividad

O pueden verlo mas detallado aqu铆 馃槈

Los eventos del observable deber铆an delegarse al Presenterya que a la vista (fragment o activity) no debe tener conocimiento de esta l贸gica. Cuando se observe un cambio, este se notifica a la vista a trav茅s del mismo Presenter.

Es muy importante tener en cuenta que estas dos interfaces tienen una continua comunicacion en andorid nuestras activities tienen un ciclo de vida volatil (el OS destruye actividades que estan en segundo plano para optimizar recursos)al momento de llamar al metodo onDestroy es una muy buena practica desuscribirme de todos los eventos de ese observable.

En este curso el docente ha explicado conceptos que en cursos anteriores fueron asumidos como ya conocidos por los estudiantes, lo cual fue un error, debido a que el curso se hacia confuso. Era como leer un libro sin conocer el idioma en el que est谩 escrito.
El curso me ha sido de gran ayuda.

鈥$ $newValue鈥 el primer simbolo de dolar es string para mostrarlo el segundo para mostrar el valor de la variable

Buenas practicas