Implementación de ViewModel en Arquitectura MVVM en Android

Clase 30 de 32Curso de Patrones de Diseño en Android

Resumen

¿Qué es el ciclo de vida en ViewModel y cómo se maneja?

El manejo del ciclo de vida en desarrollo de aplicaciones es crucial para evitar la pérdida de datos importantes, especialmente cuando ocurren eventos como rotaciones de pantalla. El modelo de arquitectura ViewModel en Android se encarga de gestionar estas situaciones al mantener el estado de las variables a pesar de los cambios de configuración. La clase ViewModel se integra en el ciclo de vida de las activities y fragments para proporcionar un manejo eficiente de los datos y del estado. ViewModel actúa como un intermediario entre los datos de la interfaz de usuario y la parte lógica del aplicativo.

¿Cómo se implementa ViewModel en Android?

Para implementar un ViewModel, primero debes crear una clase que extienda de ViewModel. En este contexto, puedes utilizar la librería Android Architecture Components, lo que te permitirá acceder a métodos como onCleared, que se llama cuando el ViewModel ya no es necesario y los datos deben ser liberados.

class LoanViewModel : ViewModel() {
    // Definición de variables LiveData
    private val _percentLiveData = MutableLiveData<Int>()
    val percentLiveData: LiveData<Int> get() = _percentLiveData

    private val _loansListLiveData = MutableLiveData<List<Loan>>()
    val loansListLiveData: LiveData<List<Loan>> get() = _loansListLiveData

    // Método para cambiar los valores
    fun changeValues() {
        _percentLiveData.value = 100
        _loansListLiveData.value = emptyList()
    }
}

¿Cómo conectar la vista con el ViewModel?

Una vez que tengas el ViewModel configurado, debes conectarlo con la interfaz de usuario o vista. Esto se realiza suscribiéndose a los objetos LiveData del ViewModel de modo que la vista pueda reaccionar a los cambios en los datos.

class LoanFragment : Fragment() {
    private lateinit var viewModel: LoanViewModel

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        viewModel = ViewModelProvider(this).get(LoanViewModel::class.java)

        // Observación de LiveData desde el ViewModel
        viewModel.percentLiveData.observe(viewLifecycleOwner, Observer { percent ->
            // Actualizar la UI con el nuevo porcentaje
            percentageTextView.text = "$percent%"
        })

        viewModel.loansListLiveData.observe(viewLifecycleOwner, Observer { loans ->
            // Actualizar los datos del adaptador
            adapter.submitList(loans)
        })

        return inflater.inflate(R.layout.fragment_loan, container, false)
    }
}

¿Cuáles son las ventajas de usar ViewModel?

  1. Persistencia durante el ciclo de vida: ViewModel conserva los datos del aplicativo durante cambios de configuración como la rotación de pantalla.

  2. Arquitectura limpia y desacoplada: Al separar la lógica de la UI del manejo de datos, ViewModel permite mantener una estructura de código más ordenada y fácil de mantener.

  3. Delegación eficiente: Se encarga de manejar eventos de la UI y actualizar solo cuando sea necesario.

  4. Seguridad en multihilo: Está diseñado para trabajar en estrecha colaboración con LiveData, lo cual garantiza notificaciones reactivas de cambios en los datos, lo que facilita el manejo concurrente de diferentes eventos de UI.

El empleo de ViewModel en la arquitectura de las aplicaciones Android es fundamental para quienes buscan eficiencia y organización en el desarrollo, garantizando aplicaciones robustas y adaptables a futuros cambios.