DEV Community

Cover image for Android ViewModel
Danilo Barreto
Danilo Barreto

Posted on

2

Android ViewModel

Uma das práticas básicas de desenvolvimento que temos que adotar assim que saímos do campo de estudos e entramos no campo de desenvolvimento profissional de aplicativos é separar a camada de negócios da camada de visualização. A camada de visualização possui um ciclo de vida próprio que muda de acordo com o estado do device (se a app está em primeiro ou segundo plano, se rotacionamos o aparelho, se o SO solicita memória, etc). Os dados de negócio não podem estar sujeitos a esses tipos de mudança.
Para auxiliar essa implementação o Kotlin traz o ViewModel. O ViewModel permite realizar uma delegação e uma separação dos dados de negócio. Vamos à implantação:

O primeiro passo é a referencia à biblioteca no build.gradle.
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'

A seguir no projeto crie uma classe herdando de ViewModel

public class PackageModel : ViewModel(){
}
Enter fullscreen mode Exit fullscreen mode

Agora vem a parte importante da implementação. O Kotlin possui um recurso chamado Property Delegate. Basicamente ele permite que uma propriedade delegue o getter e o setter para uma classe externa. A sintaxe é essa:

var [nome] : [tipo] by [classe delegada]()
Enter fullscreen mode Exit fullscreen mode

No nosso caso, vamos declarar a propriedade delegada do modelo dentro de uma Activity ou Fragment. Vai ficar assim:

private val model : PackageModel by viewModels()
Enter fullscreen mode Exit fullscreen mode

No exemplo acima viewModels() é um property delegate que vem pronto do Kotlin.

Deste ponto em diante basta implementar as propriedades e métodos necessários

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay