Android Data Binding

Este artigo apresenta uma nova biblioteca de suporte para Android chamada Data Binding. Ela permite declarar diretamente em seu layout os pontos onde serão mostrados seus dados.

Fique por dentro
Esse artigo apresenta uma nova biblioteca de suporte para Android chamada Data Binding que pode ser usada a partir do Android 2.1 (API 7). Com essa biblioteca você poderá declarar diretamente em seu layout os pontos onde serão mostrados seus dados e com isso minimizar o código necessário para ligar seu modelo à sua interface gráfica. Será explicado como escrever seu layout para que dados sejam automaticamente populados, como ligar eventos diretamente do layout para seu código e como fazer com que atualizações de seu modelo sejam refletidas diretamente na interface. Também discutiremos brevemente a tecnologia usada para desenvolver essa biblioteca.

Aplicações Android normalmente precisam exibir algum tipo de dado em sua interface gráfica e muitas vezes precisam atualizar a interface quando esses dados são alterados. Para fazer essa ligação entre dados e interface gráfica precisamos recuperar uma referência para a View, setar o dado inicial, usar algum mecanismo para ser notificado de alteração nos dados e atualizar a interface gráfica quando esses dados forem alterados.

Data binding é um mecanismo pelo qual dados são conectados diretamente à interface do usuário e atualizações feitas nos dados são automaticamente refletidas na interface. Com esse mecanismo é possível diminuir muito o código necessário para a visualização e atualização dos dados, evitando erros comuns e facilitando a manutenção de seu código.

Algumas implementações de data binding também fazem a ligação inversa: alterações na interface atualizam automaticamente os dados. Quando há a ligação em ambas as direções, o mecanismo é chamado de two-way data binding (ligação de duas vias). Infelizmente a versão atual da biblioteca para Android não suporta a segunda via.

Nos tópicos a seguir veremos como a biblioteca de data binding usa a ferramenta Java de processamento de anotações para gerar o código que ligará o modelo à interface gráfica. Veremos também como o padrão de projeto observer é utilizado para receber notificações de alterações nos dados e como utilizar essa biblioteca em um projeto exemplo, que utilizará data binding para exibir uma lista de contatos.

Geração de código em Java

A biblioteca de data binding utiliza uma ferramenta do compilador Java para processar o seu código fonte e gerar novas classes que farão o meio de campo entre os seus dados e a sua interface. Essa ferramenta se chama processador de anotações (Annotation Processing) e existe desde a versão 5 do Java, porém se tornou mais estável e fácil de usar com o lançamento da versão 6.

Como o nome sugere, o processador de anotações irá analisar as anotações existentes em seu código fonte e gerar um novo código baseado nelas. Isso acontece em tempo de compilação e pode haver mais de uma rodada de processamento até que todas as anotações sejam processadas e todo o código necessário seja gerado.

O processador nada mais é que uma classe Java que implementa a interface javax.annotation.processing.Processor. Essa classe declara quais anotações ela está interessada em processar e recebe como entrada o código fonte original e um ambiente para que se possa gerar novo código. Após o processador terminar de gerar o código na primeira rodada, o compilador irá chamá-lo novamente com o código fonte original e o gerado na primeira rodada. Esse processo é repetido até que o processador não gere mais código.

Todo esse processamento acontece em tempo de compilação e não irá impactar a sua aplicação em tempo de execução. Isso faz com que processadores de anotações sejam ótimas ferramentas para eliminar a necessidade de escrever código manualmente para tarefas que são bem definidas e repetidas em vários pontos de sua aplicação.

No caso específico da biblioteca de data binding, o código gerado irá recuperar as views de seu layout que precisam ser preenchidas com dados, aplicar os dados iniciais a essas views e observar mudanças nos dados para que elas sejam atualizadas. Essas são tarefas bem definidas e que se repetem várias vezes nas Activities, Fragments e Adapters. Ter um robô que gera código acelera o desenvolvimento e diminui a ocorrência de bugs." [...] continue lendo...

Artigos relacionados