0

Diga adeus ao findViewById()

Julio Mota
Julio Mota

Diga adeus ao findViewById()

Uma das primeiras coisas que aprendemos no desenvolvimento Android é a utilização do método findViewById() para “recuperar” e poder realizar interações com elementos da UI. Em alguns casos esse tipo de abordagem podem acarretar alguns problemas no momento da compilação do código como:

  • NulPointException ao passar um id errado
  • ClassCastException por incorrespondência da view com a declaração da variável
  • Em casos de layout mais complexos existe a possibilidade muitas linhas adicionais de código


Uma forma de evitar esses problemas é utilizar a Biblioteca da Data Binding (Vinculação de dados) para substituir o famoso findViewById()


Objetivo

Refatorar o App de cálculo de IMC para substituindo o findiviewbyid pela biblioteca Data Binding para as interações das views da UI.


Aviso: Nesse exemplo vou considerar que você já sabe manipular um arquivo de layout e usar o findViewById()

Aqui estão as telas do nosso App


Caso você queira pode fazer o clone do projeto a partir desse link 

Nosso trabalho agora está dividido em 3 etapas



1 - Habilitar o Data binding

Acesse o arquivo build.gradle(Module) e adicione o plugin kotlin-extensions, conforme a imagem:


Em seguida habilite o databind incluindo da seguinte forma

Por fim sincronize seu projeto.


2 - Alterar o layout para ser utilizado com data binding

Altere o elemento root da main_activity.xml para a tag <layout>, coloque a constraint layout dentro dela

Início


Fim


3 - Criar o objeto binding na activity

Antes do método onCreate crie uma propriedade disponível para toda a activity, faça o import da classe ActivityMainBinding (Alt+Enter)

Para finalizar substitua o metodo setContentView() com a seguinte chamada de codigo


Obs: A classe ActivityMainBinding foi gerada a partir do arquivo activity_main.xml, ela faz referência a view root e todas as suas filhas, o nome da classe sempre vai estar vinculado ao arquivo xml


O código da activity até agora estará assim


4 - Usar o objeto binding no lugar do findViewById()

A partir de agora você pode acessar qualquer view do layout a partir do objeto binding criado. Como exemplo vamos fazer o listener dos botões: Segue


Conclusão:

Em um primeiro momento pode parecer que utilizar o databind vai ser um trabalho a mais, no entanto ele trás muitas vantagens como evitar erros cast e null em tempo de compilação, da mais clareza ao código e maior performance para layouts complexos pois o databind realiza a leitura do xml e armazena isso em cache. 


É isso pessoal, espero esse artigo de alguma forma tenha agregado valor a você, agora vai nos comentários e dê sua opnião, faz sentido para você a utilização do Data Binding? Contribua compartilhando suas dúvidas e não esqueça de dar o like . Até a próxima.


Referencias

https://medium.com/@jencisov/androids-data-binding-with-kotlin-df94a24ffc0f

https://developer.android.com/topic/libraries/view-binding

https://developer.android.com/codelabs/kotlin-android-training-data-binding-basics#2



0
0

Comentários (5)

0
Bruno Tardin

Bruno Tardin

13/04/2021 16:52

Algo equivalente no Java?

0
Julio Mota

Julio Mota

06/04/2021 19:03

Cleber, pra inserir as imagens eu só copiei e colei, a dica é vc ter a imagem grande em um arquivo do word pq não tem como redimensionar aqui

1
Miguel Júnior

Miguel Júnior

06/04/2021 12:56

Ótimo, Julio.

1
CLEBER PAIVA

CLEBER PAIVA

06/04/2021 09:53

Bom dia.


Excelente seu artigo/tutorial, parabéns.


P.S. - Tenho um pequeno tutorial montado também e queria compartilhar como um artigo aqui na DIO, mas não consegui achar como colocar imagens no corpo do artigo. Poderias me orientar ?


Abraço fraterno

1
Isaias Bueno

Isaias Bueno

06/04/2021 09:05

Muito bom Julio, estava estudando sobre isso nos últimos dias, é um recurso excelente.

None

Brasil