SlideShare uma empresa Scribd logo
Como Utilizar
Métodos Binding
Adapter no Android
thiengo.com.br
Métodos binding adapter, funcionamento
Primeiro é importante saber que todas as anotações de prefixo @Binding são
anotações "binding adapter" e não somente a anotação @BindingAdapter em
específico.
Há três tipos de funcionamento com métodos binding adapter sendo utilizados, são
eles:
• Busca automática por um método setter, método que aceita como argumento o
o tipo de dado informado no atributo alvo;
• Definição explicita do método que será utilizado - @BindingMethods;
• Definição de lógica sobre qual método será utilizado - @BindingAdapter.
O framework de classes de visualização do Android faz internamente uso de
anotações @Binding, segundo a documentação. Sendo assim o comportamento
padrão é a "busca automática por métodos setters”.
Definições customizadas de métodos binding adapter (o que estudaremos neste
conjunto de slides) sobrescrevem as definições padrões no framework de classes
Android.
Busca automática por um método setter
Na busca automática, caso um atributo, oficial Android ou não, seja utilizado, um
método set com o parâmetro correto é buscado. Exemplo:
• Atributo android:text é utilizado tendo como valor @{ car.model };
• A Data Binding API busca por setText( String ), tendo em mente que a
propriedade model é do tipo String;
• Encontrando o método setText( String ), invoca ele para definir o valor em
android:text.
Os passos anteriores para acionamento do correto método setter são os mesmo
até para atributos não oficiais, como, por exemplo, app:textCar. Neste caso a Data
Binding API buscaria por setTextCar(). Se o argumento informado fosse um do tipo
Int, então a API buscaria por um método setTextCar( Int ).
A API tenta realizar a conversão caso necessário, aplicando um cast. O atributo
android:text (que aciona o método setText()) é o mais simples como exemplo de
conversão, pois o tipo aguardado é um CharSequence, porém frequentemente o
tipo fornecido é uma String.
Acesso a método específico, @BindingMethods
A anotação @BindingMethods nos permite direcionar o método que será invocado de acordo
com a visualização e o atributo sendo utilizados. Veja o código a seguir:
Note que na segunda definição de BindingMethod foi utilizada a superclasse de
TitleTextView, mais precisamente a definição TextView::class. Não há problemas
quanto a isso, pois o que é válido para a superclasse também é válido para as
subclasses.
@BindingMethods aceita quantos BindingMethod forem necessários. Os
argumentos de BindingMethod são, em ordem:
• O tipo da View que terá a alteração do método setter do atributo especificado
- type;
• O atributo que terá um novo método setter vinculado a ele - attribute;
• O rótulo do novo método setter vinculado ao atributo - method.
A documentação oficial informa que a definição de @BindingMethods pode ser
realizada em qualquer classe, incluindo uma classe vazia.
Mas segundo alguns testes realizados a classe tem de ser a classe View que será
utilizada, caso contrário, ao menos para métodos ou atributos novos (não definidos
no framework Android), não haverá vinculo dos métodos binding adapter.
Para melhor entendimento, a definição anterior da classe TitleTextView somente
terá efeito se está classe View for utilizada, como a seguir:
Caso contrário, utilizando diretamente o widget TextView, por exemplo, nem
mesmo o método setPaddingLeft() é invocado. O TextView a seguir não aciona
nenhum dos métodos vinculados anteriormente via @BindingMethods:
Fique ciente que para métodos binding serem invocados, também é preciso o uso
da sintaxe binding, ou seja, o valor do atributo entre @{}.
Um outro ponto importante: na documentação o namespace é informado como
parte irrelevante, mas quando testando temos que a definição attribute = "text"
não aciona o método setTextTitle() como a definição com o namespace attribute =
“android:text".
Ou seja, sim, para qualquer método binding o namespace do atributo é importante.
Thiengo, quantos conflitos com a documentação oficial em relação a prática. É isso
mesmo?
Sim, provavelmente a documentação oficial não está atualizada de acordo com a
evolução da biblioteca Data Binding.
Lógica customizada para acesso a método setter,
@BindingAdapter
Se você estudou o primeiro artigo do Blog sobre Data Binding então já deve conhecer a
anotação @BindingAdapter, que se não utilizada com as devidas precauções pode ser
tão prejudicial quanto os conhecidos "variável global" e "go to".
Diferente de @BindingMethods, métodos @BindingAdapter têm de estar em um
contexto de entidade estática, que no Kotlin é a definição do método dentro de uma
classe object ou companion object e com a anotação @JvmStatic.
O método a seguir é específico para a atualização do padding de topo de uma View
qualquer, e não somente a TitleTextView, que faz uso do atributo android:paddingTop:
O namespace do atributo também é importante aqui. Não há necessidade de ser
um atributo já definido no Android, pode ser um qualquer de sua autoria, incluindo o
namespace.
O método setPaddingTop() anterior seria seguramente acionado pela definição a
seguir:
O primeiro argumento de um método @BindingAdapter é a View alvo, os
argumentos posteriores são os valores dos atributos definidos como argumentos
em @BindingAdapter( ... ).
Agora uma versão @BindingAdapter com mais de um atributo sendo necessário
(ou não) para acionar um método:
Como requireAll foi definido com o valor false, o uso de qualquer um dos
atributos, android:paddingBottom ou android:paddingRight, acionará o método
setPaddingBottomRight().
Como Int é um "tipo primitivo", o 0 será o valor do parâmetro que não tiver um dado
informado em XML.
Em caso de tipo de dado que não é primitivo, coloque a definição de aceitação de
null na declaração do parâmetro (exemplo: Tipo?) quando o requireAll for false,
caso contrário uma exceção poderá ser gerada.
Acessando o antigo e o novo valor em uma mesma definição
de método setter
Caso seja necessário acessar também o valor antigo definido no atributo, a sintaxe
para atendimento a essa necessidade é como a seguir:
O método setMarginLeft() será acionado quando houver, por exemplo, definições
em layout como abaixo:
Caso mais de um atributo seja definido, então os primeiros parâmetros depois do
parâmetro da visualização alvo é que serão os valores antigos, veja o exemplo:
Conversão de valor via @BindingConversion
Em alguns casos a conversão automática da API Data Binding não funciona, isso, pois a
simples sintaxe de cast geraria uma exceção.
Nessas situações nós podemos utilizar a anotação @BindingConversion em um método de
contexto estático, como quando utilizando a anotação @BindingAdapter.
O método conversion definido pode ter qualquer rótulo, mas para ele ser invocado é necessário:
• o tipo de parâmetro correto;
• e também o tipo de retorno correto.
No exemplo a seguir o atributo android:background está recebendo como valor um tipo Int,
pois @color/nome_cor retorna o ID identificador da cor em arquivo XML de cores, porém o tipo
de valor aguardado em android:background é um Drawable:
No código dinâmico podemos ter a seguinte configuração de método de conversão:
Como informado anteriormente, o vinculo entre método setter e atributo ocorre pelo
uso da anotação @BindingConversion em um método de contexto estático e com
os corretos tipos de parâmetro e retorno de função.
Note que de todas as anotações @Binding discutidas neste conjunto de slides,
somente a @BindingConversion trabalha com métodos que têm valor de retorno,
as outras anotações não utilizam valor de retorno.
Pontos negativos
• A uso de anotação para método de conversão, @BindingConversion,
deveria aceitar como argumento o atributo vinculado ao novo método de
conversão, algo similar ao que é necessário quando utilizando
@BindingAdapter. A falta desse vinculo explicito pode confundir alguns
desenvolvedores que estão iniciando na biblioteca Data Binding;
• A teoria na documentação é bem inconsistente quando comparada à prática
da API Data Binding, muitas coisas informadas na documentação divergem
da prática, ou seja, provavelmente a documentação, ao menos para a API
utilizada no contexto Kotlin, está depreciada;
• Todos os métodos binding adapters customizados podem oferecer problemas
de leitura de código, como acontece com o uso de "variáveis globais" e de
sintaxes "go to", caso não muito bem documentados.
Ponto positivo
• Métodos @BindingMethods podem melhorar a arquitetura do projeto, leitura
de código, para novas visualizações que tendem a utilizar os mesmos
atributos de widgets nativos Android, porém com um processamento
diferente, como fizemos com o TitleTextView.
Conclusão
Apesar dos inúmeros problemas entre teoria na documentação e a prática da
parte de métodos binding da API Data Binding, o conhecimento de uso de
@BindingMethods, @BindingAdapter e @BindingConversion pode lhe ajudar
em algumas situações específicas, como foi o caso da visualização personalizada
TitleTextView.
Mas confesso que não vejo o uso dessas anotações sendo algo comum, diferente
do restante dos recursos da biblioteca Data Binding.
De qualquer forma, conhecer por completo a Data Binding API é sim importante,
primeiro porque o mercado de desenvolvedor Android exigi isso, segundo porque
são os problemas específicos de domínio que vão dizer se você está ou não
preparado para utilizar os recursos menos convencionais de qualquer API.
Fontes
Conteúdo completo, em texto e em vídeo, no link a seguir:
• Como Utilizar Métodos Binding Adapter no Android.
Fontes:
• Binding adapters;
• Data bindings with custom listeners on custom view - Resposta de subhash.
Para estudo
• Treinamento oficial:
• Prototipagem Profissional de Aplicativos Android.
• Meus livros:
• Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia;
• Receitas Para Desenvolvedores Android;
• Refatorando Para Programas Limpos.
• Redes:
• Udemy;
• YouTube;
• Facebook;
• LinkedIn;
• GitHub;
• Twitter;
• Google Plus.
• Blog App.
Como Utilizar Métodos Binding
Adapter no Android
thiengo.com.br
Vinícius Thiengo
thiengocalopsita@gmail.com

Mais conteúdo relacionado

Mais procurados

Chips Android, Quando e Como Utilizar
Chips Android, Quando e Como UtilizarChips Android, Quando e Como Utilizar
Chips Android, Quando e Como Utilizar
Vinícius Thiengo
 
Lottie API Para Animações no Android
Lottie API Para Animações no AndroidLottie API Para Animações no Android
Lottie API Para Animações no Android
Vinícius Thiengo
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State API
Vinícius Thiengo
 
Como Impulsionar o App Android - Compartilhamento Nativo
Como Impulsionar o App Android - Compartilhamento NativoComo Impulsionar o App Android - Compartilhamento Nativo
Como Impulsionar o App Android - Compartilhamento Nativo
Vinícius Thiengo
 
Estudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogEstudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do Blog
Vinícius Thiengo
 
True Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no AndroidTrue Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no Android
Vinícius Thiengo
 
Annotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no AndroidAnnotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no Android
Vinícius Thiengo
 
Estudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogEstudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do Blog
Vinícius Thiengo
 
Android Studio
Android StudioAndroid Studio
Android Studio
Vinícius Thiengo
 
Iniciando com realm
Iniciando com realmIniciando com realm
Iniciando com realm
Leonardo Turbiani
 
Apostila Android
Apostila AndroidApostila Android
Apostila Android
Andre Nascimento
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
Henrique Gogó
 
Tdd com Node.js
Tdd com Node.jsTdd com Node.js
Tdd com Node.js
Camila Sass
 
Artigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle BehaveArtigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle Behave
Julian Cesar
 
Fontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e UsoFontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e Uso
Vinícius Thiengo
 
Introdução ao Github actions - TDC Connections
Introdução ao Github actions - TDC ConnectionsIntrodução ao Github actions - TDC Connections
Introdução ao Github actions - TDC Connections
Guillaume Falourd
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01
Walney Negreiros
 
Demoiselle Behave - Parte 4
Demoiselle Behave - Parte 4Demoiselle Behave - Parte 4
Demoiselle Behave - Parte 4
Vanderson Silva
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
Rogerio Fontes
 
Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3
Vanderson Silva
 

Mais procurados (20)

Chips Android, Quando e Como Utilizar
Chips Android, Quando e Como UtilizarChips Android, Quando e Como Utilizar
Chips Android, Quando e Como Utilizar
 
Lottie API Para Animações no Android
Lottie API Para Animações no AndroidLottie API Para Animações no Android
Lottie API Para Animações no Android
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State API
 
Como Impulsionar o App Android - Compartilhamento Nativo
Como Impulsionar o App Android - Compartilhamento NativoComo Impulsionar o App Android - Compartilhamento Nativo
Como Impulsionar o App Android - Compartilhamento Nativo
 
Estudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogEstudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do Blog
 
True Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no AndroidTrue Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no Android
 
Annotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no AndroidAnnotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no Android
 
Estudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogEstudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do Blog
 
Android Studio
Android StudioAndroid Studio
Android Studio
 
Iniciando com realm
Iniciando com realmIniciando com realm
Iniciando com realm
 
Apostila Android
Apostila AndroidApostila Android
Apostila Android
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Tdd com Node.js
Tdd com Node.jsTdd com Node.js
Tdd com Node.js
 
Artigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle BehaveArtigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle Behave
 
Fontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e UsoFontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e Uso
 
Introdução ao Github actions - TDC Connections
Introdução ao Github actions - TDC ConnectionsIntrodução ao Github actions - TDC Connections
Introdução ao Github actions - TDC Connections
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01
 
Demoiselle Behave - Parte 4
Demoiselle Behave - Parte 4Demoiselle Behave - Parte 4
Demoiselle Behave - Parte 4
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3
 

Semelhante a Como Utilizar Métodos Binding Adapter no Android

Data Binding Android - Levi Saturnino
Data Binding  Android - Levi SaturninoData Binding  Android - Levi Saturnino
Data Binding Android - Levi Saturnino
Levi Saturnino
 
Programação Web com Zend Framework e Ajax com Dojo
Programação Web com Zend Framework e Ajax com DojoProgramação Web com Zend Framework e Ajax com Dojo
Programação Web com Zend Framework e Ajax com Dojo
fabioginzel
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
Fabio Moura Pereira
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)
Ryan Padilha
 
Acessando banco de dados remoto com android
Acessando banco de dados remoto com android Acessando banco de dados remoto com android
Acessando banco de dados remoto com android
Leonardo Moreira Dos Santos
 
ASP.NET MVC 4 - Parte II - Views
ASP.NET MVC 4 - Parte II - Views ASP.NET MVC 4 - Parte II - Views
ASP.NET MVC 4 - Parte II - Views
Carlos Atila Abreu
 
Aula1
Aula1Aula1
Aula1
mentrixmax
 
Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6
Erisvaldo Junior
 
Javascript (parte 1)
Javascript (parte 1)Javascript (parte 1)
Javascript (parte 1)
Alex Camargo
 
ZF Básico - 5. Modelo
ZF Básico - 5. ModeloZF Básico - 5. Modelo
ZF Básico - 5. Modelo
Marcos Bezerra
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
Denis L Presciliano
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
Erisvaldo Junior
 
ASP.NET MVC - Model Binding
ASP.NET MVC - Model BindingASP.NET MVC - Model Binding
ASP.NET MVC - Model Binding
Fernando Kakimoto
 
Desenvolvimento Delphi
Desenvolvimento DelphiDesenvolvimento Delphi
Desenvolvimento Delphi
hildebertomelo
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
alinebiath
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Mario Guedes
 
Atps de banco de dados rel 1 3-4 atualizado formato ok
Atps de banco de dados rel 1 3-4  atualizado formato okAtps de banco de dados rel 1 3-4  atualizado formato ok
Atps de banco de dados rel 1 3-4 atualizado formato ok
Thyvis Kalevi
 
Usando a data grid wpf
Usando a data grid wpfUsando a data grid wpf
Usando a data grid wpf
Sidney07queiroz
 
#DeveloperDay - Front-end API html5
#DeveloperDay - Front-end API html5#DeveloperDay - Front-end API html5
#DeveloperDay - Front-end API html5
Leandro Santos
 
W3 c
W3 cW3 c
W3 c
icajai
 

Semelhante a Como Utilizar Métodos Binding Adapter no Android (20)

Data Binding Android - Levi Saturnino
Data Binding  Android - Levi SaturninoData Binding  Android - Levi Saturnino
Data Binding Android - Levi Saturnino
 
Programação Web com Zend Framework e Ajax com Dojo
Programação Web com Zend Framework e Ajax com DojoProgramação Web com Zend Framework e Ajax com Dojo
Programação Web com Zend Framework e Ajax com Dojo
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)
 
Acessando banco de dados remoto com android
Acessando banco de dados remoto com android Acessando banco de dados remoto com android
Acessando banco de dados remoto com android
 
ASP.NET MVC 4 - Parte II - Views
ASP.NET MVC 4 - Parte II - Views ASP.NET MVC 4 - Parte II - Views
ASP.NET MVC 4 - Parte II - Views
 
Aula1
Aula1Aula1
Aula1
 
Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6
 
Javascript (parte 1)
Javascript (parte 1)Javascript (parte 1)
Javascript (parte 1)
 
ZF Básico - 5. Modelo
ZF Básico - 5. ModeloZF Básico - 5. Modelo
ZF Básico - 5. Modelo
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
 
ASP.NET MVC - Model Binding
ASP.NET MVC - Model BindingASP.NET MVC - Model Binding
ASP.NET MVC - Model Binding
 
Desenvolvimento Delphi
Desenvolvimento DelphiDesenvolvimento Delphi
Desenvolvimento Delphi
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
 
Atps de banco de dados rel 1 3-4 atualizado formato ok
Atps de banco de dados rel 1 3-4  atualizado formato okAtps de banco de dados rel 1 3-4  atualizado formato ok
Atps de banco de dados rel 1 3-4 atualizado formato ok
 
Usando a data grid wpf
Usando a data grid wpfUsando a data grid wpf
Usando a data grid wpf
 
#DeveloperDay - Front-end API html5
#DeveloperDay - Front-end API html5#DeveloperDay - Front-end API html5
#DeveloperDay - Front-end API html5
 
W3 c
W3 cW3 c
W3 c
 

Mais de Vinícius Thiengo

Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?
Vinícius Thiengo
 
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
Vinícius Thiengo
 
5 livros que não são de TI, mas que um desenvolvedor deveria ler
5 livros que não são de TI, mas que um desenvolvedor deveria ler5 livros que não são de TI, mas que um desenvolvedor deveria ler
5 livros que não são de TI, mas que um desenvolvedor deveria ler
Vinícius Thiengo
 
PhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de ZoomPhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de Zoom
Vinícius Thiengo
 
Utilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no AndroidUtilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no Android
Vinícius Thiengo
 
Trabalhando Análise Qualitativa em seu Aplicativo Android
Trabalhando Análise Qualitativa em seu Aplicativo AndroidTrabalhando Análise Qualitativa em seu Aplicativo Android
Trabalhando Análise Qualitativa em seu Aplicativo Android
Vinícius Thiengo
 
BottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando UtilizarBottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando Utilizar
Vinícius Thiengo
 
Android: Avaliação do Pré-projeto Agenda Cultural
Android: Avaliação do Pré-projeto Agenda CulturalAndroid: Avaliação do Pré-projeto Agenda Cultural
Android: Avaliação do Pré-projeto Agenda Cultural
Vinícius Thiengo
 
Freelancer Android
Freelancer AndroidFreelancer Android
Freelancer Android
Vinícius Thiengo
 
Definindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos AndroidDefinindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos Android
Vinícius Thiengo
 
Material Design
Material DesignMaterial Design
Material Design
Vinícius Thiengo
 

Mais de Vinícius Thiengo (11)

Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?
 
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
 
5 livros que não são de TI, mas que um desenvolvedor deveria ler
5 livros que não são de TI, mas que um desenvolvedor deveria ler5 livros que não são de TI, mas que um desenvolvedor deveria ler
5 livros que não são de TI, mas que um desenvolvedor deveria ler
 
PhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de ZoomPhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de Zoom
 
Utilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no AndroidUtilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no Android
 
Trabalhando Análise Qualitativa em seu Aplicativo Android
Trabalhando Análise Qualitativa em seu Aplicativo AndroidTrabalhando Análise Qualitativa em seu Aplicativo Android
Trabalhando Análise Qualitativa em seu Aplicativo Android
 
BottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando UtilizarBottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando Utilizar
 
Android: Avaliação do Pré-projeto Agenda Cultural
Android: Avaliação do Pré-projeto Agenda CulturalAndroid: Avaliação do Pré-projeto Agenda Cultural
Android: Avaliação do Pré-projeto Agenda Cultural
 
Freelancer Android
Freelancer AndroidFreelancer Android
Freelancer Android
 
Definindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos AndroidDefinindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos Android
 
Material Design
Material DesignMaterial Design
Material Design
 

Último

Folha de Atividades (Virei Super-Herói! Projeto de Edição de Fotos) com Grade...
Folha de Atividades (Virei Super-Herói! Projeto de Edição de Fotos) com Grade...Folha de Atividades (Virei Super-Herói! Projeto de Edição de Fotos) com Grade...
Folha de Atividades (Virei Super-Herói! Projeto de Edição de Fotos) com Grade...
marcos oliveira
 
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
Sandra Pratas
 
Escola de Especialistas de Aeronáutica (EEAR).pdf
Escola de Especialistas de Aeronáutica (EEAR).pdfEscola de Especialistas de Aeronáutica (EEAR).pdf
Escola de Especialistas de Aeronáutica (EEAR).pdf
Falcão Brasil
 
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptxSlides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
LuizHenriquedeAlmeid6
 
Portfólio Estratégico da Força Aérea Brasileira (FAB).pdf
Portfólio Estratégico da Força Aérea Brasileira (FAB).pdfPortfólio Estratégico da Força Aérea Brasileira (FAB).pdf
Portfólio Estratégico da Força Aérea Brasileira (FAB).pdf
Falcão Brasil
 
Marinha do Brasil (MB) Politíca Naval.pdf
Marinha do Brasil (MB) Politíca Naval.pdfMarinha do Brasil (MB) Politíca Naval.pdf
Marinha do Brasil (MB) Politíca Naval.pdf
Falcão Brasil
 
P0107 do aluno da educação municipal.pdf
P0107 do aluno da educação municipal.pdfP0107 do aluno da educação municipal.pdf
P0107 do aluno da educação municipal.pdf
Ceiça Martins Vital
 
Introdução ao filme Divertida Mente 2 em pdf
Introdução ao filme Divertida Mente 2 em pdfIntrodução ao filme Divertida Mente 2 em pdf
Introdução ao filme Divertida Mente 2 em pdf
valdeci17
 
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Falcão Brasil
 
Conhecimento sobre Vestimenta Anti chamas
Conhecimento sobre Vestimenta Anti chamasConhecimento sobre Vestimenta Anti chamas
Conhecimento sobre Vestimenta Anti chamas
edusegtrab
 
APRESENTAÇÃO CURSO FORMAÇÃO EXPERT EM MODERAÇÃO DE FOCUS GROUP.pdf
APRESENTAÇÃO  CURSO FORMAÇÃO EXPERT EM MODERAÇÃO DE FOCUS GROUP.pdfAPRESENTAÇÃO  CURSO FORMAÇÃO EXPERT EM MODERAÇÃO DE FOCUS GROUP.pdf
APRESENTAÇÃO CURSO FORMAÇÃO EXPERT EM MODERAÇÃO DE FOCUS GROUP.pdf
portaladministradores
 
Aviação de Reconhecimento e Ataque na FAB. A Saga dos Guerreiros Polivalentes...
Aviação de Reconhecimento e Ataque na FAB. A Saga dos Guerreiros Polivalentes...Aviação de Reconhecimento e Ataque na FAB. A Saga dos Guerreiros Polivalentes...
Aviação de Reconhecimento e Ataque na FAB. A Saga dos Guerreiros Polivalentes...
Falcão Brasil
 
Portfólio Estratégico da Marinha do Brasil (MB).pdf
Portfólio Estratégico da Marinha do Brasil (MB).pdfPortfólio Estratégico da Marinha do Brasil (MB).pdf
Portfólio Estratégico da Marinha do Brasil (MB).pdf
Falcão Brasil
 
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Centro Jacques Delors
 
Aviação de Asas Rotativas. Aos Rotores, o Sabre!.pdf
Aviação de Asas Rotativas. Aos Rotores, o Sabre!.pdfAviação de Asas Rotativas. Aos Rotores, o Sabre!.pdf
Aviação de Asas Rotativas. Aos Rotores, o Sabre!.pdf
Falcão Brasil
 
VOCÊ CONHECE AS HISTÓRIAS DA BIBLÍA - EMOJIES.pptx
VOCÊ CONHECE AS HISTÓRIAS DA BIBLÍA - EMOJIES.pptxVOCÊ CONHECE AS HISTÓRIAS DA BIBLÍA - EMOJIES.pptx
VOCÊ CONHECE AS HISTÓRIAS DA BIBLÍA - EMOJIES.pptx
mailabueno45
 
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdfEscola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Falcão Brasil
 
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
principeandregalli
 
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Falcão Brasil
 

Último (20)

Folha de Atividades (Virei Super-Herói! Projeto de Edição de Fotos) com Grade...
Folha de Atividades (Virei Super-Herói! Projeto de Edição de Fotos) com Grade...Folha de Atividades (Virei Super-Herói! Projeto de Edição de Fotos) com Grade...
Folha de Atividades (Virei Super-Herói! Projeto de Edição de Fotos) com Grade...
 
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
 
Escola de Especialistas de Aeronáutica (EEAR).pdf
Escola de Especialistas de Aeronáutica (EEAR).pdfEscola de Especialistas de Aeronáutica (EEAR).pdf
Escola de Especialistas de Aeronáutica (EEAR).pdf
 
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptxSlides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
 
Portfólio Estratégico da Força Aérea Brasileira (FAB).pdf
Portfólio Estratégico da Força Aérea Brasileira (FAB).pdfPortfólio Estratégico da Força Aérea Brasileira (FAB).pdf
Portfólio Estratégico da Força Aérea Brasileira (FAB).pdf
 
Marinha do Brasil (MB) Politíca Naval.pdf
Marinha do Brasil (MB) Politíca Naval.pdfMarinha do Brasil (MB) Politíca Naval.pdf
Marinha do Brasil (MB) Politíca Naval.pdf
 
P0107 do aluno da educação municipal.pdf
P0107 do aluno da educação municipal.pdfP0107 do aluno da educação municipal.pdf
P0107 do aluno da educação municipal.pdf
 
Introdução ao filme Divertida Mente 2 em pdf
Introdução ao filme Divertida Mente 2 em pdfIntrodução ao filme Divertida Mente 2 em pdf
Introdução ao filme Divertida Mente 2 em pdf
 
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
 
RECORDANDO BONS MOMENTOS! _
RECORDANDO BONS MOMENTOS!               _RECORDANDO BONS MOMENTOS!               _
RECORDANDO BONS MOMENTOS! _
 
Conhecimento sobre Vestimenta Anti chamas
Conhecimento sobre Vestimenta Anti chamasConhecimento sobre Vestimenta Anti chamas
Conhecimento sobre Vestimenta Anti chamas
 
APRESENTAÇÃO CURSO FORMAÇÃO EXPERT EM MODERAÇÃO DE FOCUS GROUP.pdf
APRESENTAÇÃO  CURSO FORMAÇÃO EXPERT EM MODERAÇÃO DE FOCUS GROUP.pdfAPRESENTAÇÃO  CURSO FORMAÇÃO EXPERT EM MODERAÇÃO DE FOCUS GROUP.pdf
APRESENTAÇÃO CURSO FORMAÇÃO EXPERT EM MODERAÇÃO DE FOCUS GROUP.pdf
 
Aviação de Reconhecimento e Ataque na FAB. A Saga dos Guerreiros Polivalentes...
Aviação de Reconhecimento e Ataque na FAB. A Saga dos Guerreiros Polivalentes...Aviação de Reconhecimento e Ataque na FAB. A Saga dos Guerreiros Polivalentes...
Aviação de Reconhecimento e Ataque na FAB. A Saga dos Guerreiros Polivalentes...
 
Portfólio Estratégico da Marinha do Brasil (MB).pdf
Portfólio Estratégico da Marinha do Brasil (MB).pdfPortfólio Estratégico da Marinha do Brasil (MB).pdf
Portfólio Estratégico da Marinha do Brasil (MB).pdf
 
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
 
Aviação de Asas Rotativas. Aos Rotores, o Sabre!.pdf
Aviação de Asas Rotativas. Aos Rotores, o Sabre!.pdfAviação de Asas Rotativas. Aos Rotores, o Sabre!.pdf
Aviação de Asas Rotativas. Aos Rotores, o Sabre!.pdf
 
VOCÊ CONHECE AS HISTÓRIAS DA BIBLÍA - EMOJIES.pptx
VOCÊ CONHECE AS HISTÓRIAS DA BIBLÍA - EMOJIES.pptxVOCÊ CONHECE AS HISTÓRIAS DA BIBLÍA - EMOJIES.pptx
VOCÊ CONHECE AS HISTÓRIAS DA BIBLÍA - EMOJIES.pptx
 
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdfEscola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
 
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
 
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
 

Como Utilizar Métodos Binding Adapter no Android

  • 1. Como Utilizar Métodos Binding Adapter no Android thiengo.com.br
  • 2. Métodos binding adapter, funcionamento Primeiro é importante saber que todas as anotações de prefixo @Binding são anotações "binding adapter" e não somente a anotação @BindingAdapter em específico. Há três tipos de funcionamento com métodos binding adapter sendo utilizados, são eles: • Busca automática por um método setter, método que aceita como argumento o o tipo de dado informado no atributo alvo; • Definição explicita do método que será utilizado - @BindingMethods; • Definição de lógica sobre qual método será utilizado - @BindingAdapter. O framework de classes de visualização do Android faz internamente uso de anotações @Binding, segundo a documentação. Sendo assim o comportamento padrão é a "busca automática por métodos setters”. Definições customizadas de métodos binding adapter (o que estudaremos neste conjunto de slides) sobrescrevem as definições padrões no framework de classes Android.
  • 3. Busca automática por um método setter Na busca automática, caso um atributo, oficial Android ou não, seja utilizado, um método set com o parâmetro correto é buscado. Exemplo: • Atributo android:text é utilizado tendo como valor @{ car.model }; • A Data Binding API busca por setText( String ), tendo em mente que a propriedade model é do tipo String; • Encontrando o método setText( String ), invoca ele para definir o valor em android:text. Os passos anteriores para acionamento do correto método setter são os mesmo até para atributos não oficiais, como, por exemplo, app:textCar. Neste caso a Data Binding API buscaria por setTextCar(). Se o argumento informado fosse um do tipo Int, então a API buscaria por um método setTextCar( Int ). A API tenta realizar a conversão caso necessário, aplicando um cast. O atributo android:text (que aciona o método setText()) é o mais simples como exemplo de conversão, pois o tipo aguardado é um CharSequence, porém frequentemente o tipo fornecido é uma String.
  • 4. Acesso a método específico, @BindingMethods A anotação @BindingMethods nos permite direcionar o método que será invocado de acordo com a visualização e o atributo sendo utilizados. Veja o código a seguir:
  • 5. Note que na segunda definição de BindingMethod foi utilizada a superclasse de TitleTextView, mais precisamente a definição TextView::class. Não há problemas quanto a isso, pois o que é válido para a superclasse também é válido para as subclasses. @BindingMethods aceita quantos BindingMethod forem necessários. Os argumentos de BindingMethod são, em ordem: • O tipo da View que terá a alteração do método setter do atributo especificado - type; • O atributo que terá um novo método setter vinculado a ele - attribute; • O rótulo do novo método setter vinculado ao atributo - method. A documentação oficial informa que a definição de @BindingMethods pode ser realizada em qualquer classe, incluindo uma classe vazia. Mas segundo alguns testes realizados a classe tem de ser a classe View que será utilizada, caso contrário, ao menos para métodos ou atributos novos (não definidos no framework Android), não haverá vinculo dos métodos binding adapter.
  • 6. Para melhor entendimento, a definição anterior da classe TitleTextView somente terá efeito se está classe View for utilizada, como a seguir: Caso contrário, utilizando diretamente o widget TextView, por exemplo, nem mesmo o método setPaddingLeft() é invocado. O TextView a seguir não aciona nenhum dos métodos vinculados anteriormente via @BindingMethods:
  • 7. Fique ciente que para métodos binding serem invocados, também é preciso o uso da sintaxe binding, ou seja, o valor do atributo entre @{}. Um outro ponto importante: na documentação o namespace é informado como parte irrelevante, mas quando testando temos que a definição attribute = "text" não aciona o método setTextTitle() como a definição com o namespace attribute = “android:text". Ou seja, sim, para qualquer método binding o namespace do atributo é importante. Thiengo, quantos conflitos com a documentação oficial em relação a prática. É isso mesmo? Sim, provavelmente a documentação oficial não está atualizada de acordo com a evolução da biblioteca Data Binding.
  • 8. Lógica customizada para acesso a método setter, @BindingAdapter Se você estudou o primeiro artigo do Blog sobre Data Binding então já deve conhecer a anotação @BindingAdapter, que se não utilizada com as devidas precauções pode ser tão prejudicial quanto os conhecidos "variável global" e "go to". Diferente de @BindingMethods, métodos @BindingAdapter têm de estar em um contexto de entidade estática, que no Kotlin é a definição do método dentro de uma classe object ou companion object e com a anotação @JvmStatic. O método a seguir é específico para a atualização do padding de topo de uma View qualquer, e não somente a TitleTextView, que faz uso do atributo android:paddingTop:
  • 9. O namespace do atributo também é importante aqui. Não há necessidade de ser um atributo já definido no Android, pode ser um qualquer de sua autoria, incluindo o namespace. O método setPaddingTop() anterior seria seguramente acionado pela definição a seguir: O primeiro argumento de um método @BindingAdapter é a View alvo, os argumentos posteriores são os valores dos atributos definidos como argumentos em @BindingAdapter( ... ).
  • 10. Agora uma versão @BindingAdapter com mais de um atributo sendo necessário (ou não) para acionar um método: Como requireAll foi definido com o valor false, o uso de qualquer um dos atributos, android:paddingBottom ou android:paddingRight, acionará o método setPaddingBottomRight(). Como Int é um "tipo primitivo", o 0 será o valor do parâmetro que não tiver um dado informado em XML. Em caso de tipo de dado que não é primitivo, coloque a definição de aceitação de null na declaração do parâmetro (exemplo: Tipo?) quando o requireAll for false, caso contrário uma exceção poderá ser gerada.
  • 11. Acessando o antigo e o novo valor em uma mesma definição de método setter Caso seja necessário acessar também o valor antigo definido no atributo, a sintaxe para atendimento a essa necessidade é como a seguir:
  • 12. O método setMarginLeft() será acionado quando houver, por exemplo, definições em layout como abaixo: Caso mais de um atributo seja definido, então os primeiros parâmetros depois do parâmetro da visualização alvo é que serão os valores antigos, veja o exemplo:
  • 13. Conversão de valor via @BindingConversion Em alguns casos a conversão automática da API Data Binding não funciona, isso, pois a simples sintaxe de cast geraria uma exceção. Nessas situações nós podemos utilizar a anotação @BindingConversion em um método de contexto estático, como quando utilizando a anotação @BindingAdapter. O método conversion definido pode ter qualquer rótulo, mas para ele ser invocado é necessário: • o tipo de parâmetro correto; • e também o tipo de retorno correto. No exemplo a seguir o atributo android:background está recebendo como valor um tipo Int, pois @color/nome_cor retorna o ID identificador da cor em arquivo XML de cores, porém o tipo de valor aguardado em android:background é um Drawable:
  • 14. No código dinâmico podemos ter a seguinte configuração de método de conversão: Como informado anteriormente, o vinculo entre método setter e atributo ocorre pelo uso da anotação @BindingConversion em um método de contexto estático e com os corretos tipos de parâmetro e retorno de função. Note que de todas as anotações @Binding discutidas neste conjunto de slides, somente a @BindingConversion trabalha com métodos que têm valor de retorno, as outras anotações não utilizam valor de retorno.
  • 15. Pontos negativos • A uso de anotação para método de conversão, @BindingConversion, deveria aceitar como argumento o atributo vinculado ao novo método de conversão, algo similar ao que é necessário quando utilizando @BindingAdapter. A falta desse vinculo explicito pode confundir alguns desenvolvedores que estão iniciando na biblioteca Data Binding; • A teoria na documentação é bem inconsistente quando comparada à prática da API Data Binding, muitas coisas informadas na documentação divergem da prática, ou seja, provavelmente a documentação, ao menos para a API utilizada no contexto Kotlin, está depreciada; • Todos os métodos binding adapters customizados podem oferecer problemas de leitura de código, como acontece com o uso de "variáveis globais" e de sintaxes "go to", caso não muito bem documentados.
  • 16. Ponto positivo • Métodos @BindingMethods podem melhorar a arquitetura do projeto, leitura de código, para novas visualizações que tendem a utilizar os mesmos atributos de widgets nativos Android, porém com um processamento diferente, como fizemos com o TitleTextView.
  • 17. Conclusão Apesar dos inúmeros problemas entre teoria na documentação e a prática da parte de métodos binding da API Data Binding, o conhecimento de uso de @BindingMethods, @BindingAdapter e @BindingConversion pode lhe ajudar em algumas situações específicas, como foi o caso da visualização personalizada TitleTextView. Mas confesso que não vejo o uso dessas anotações sendo algo comum, diferente do restante dos recursos da biblioteca Data Binding. De qualquer forma, conhecer por completo a Data Binding API é sim importante, primeiro porque o mercado de desenvolvedor Android exigi isso, segundo porque são os problemas específicos de domínio que vão dizer se você está ou não preparado para utilizar os recursos menos convencionais de qualquer API.
  • 18. Fontes Conteúdo completo, em texto e em vídeo, no link a seguir: • Como Utilizar Métodos Binding Adapter no Android. Fontes: • Binding adapters; • Data bindings with custom listeners on custom view - Resposta de subhash.
  • 19. Para estudo • Treinamento oficial: • Prototipagem Profissional de Aplicativos Android. • Meus livros: • Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia; • Receitas Para Desenvolvedores Android; • Refatorando Para Programas Limpos. • Redes: • Udemy; • YouTube; • Facebook; • LinkedIn; • GitHub; • Twitter; • Google Plus. • Blog App.
  • 20. Como Utilizar Métodos Binding Adapter no Android thiengo.com.br Vinícius Thiengo thiengocalopsita@gmail.com