SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Observable Binding
Para Atualização na
UI Android
thiengo.com.br
Para que os tipos observáveis de Data Binding?
Quando trabalhando em projeto Android quase sempre temos de ter o trecho de
código responsável por atualizar as visualizações em tela, isso, pois os objetos
com os dados referenciados nas visualizações já foram atualizados e essa
atualização precisa ser refletida ao usuário do aplicativo.
Com os tipos observáveis da biblioteca Data Binding nós, desenvolvedores, não
mais precisamos nos preocupar com essa parte do fluxo: invocações de métodos e
visualizações para refletir a atualização de objetos também em tela.
Há três categorias de classes observáveis dentro da Data Binding API:
• Observáveis de campo (propriedade);
• Observáveis de coleções;
• Observáveis de objetos.
Já lhe adianto que os observáveis de campo quase sempre serão os utilizados em
desenvolvimento. Com isso podemos partir para os códigos de exemplo.
Instalação da biblioteca
No Kotlin a configuração de instalação da biblioteca Data Binding exige as
seguintes referências no Gradle App Level, ou build.gradle (Module: app):
Até o momento da construção deste conjunto de slides a versão estável mais atual
da com.android.databinding era a 3.1.4.
A versão da biblioteca é a mesma versão do plugin do Gradle, logo, no Gradle
Project Level, ou build.gradle (Project: NomeApp), podemos ter:
E então no Gradle App Level teríamos a atualização da referência
'com.android.databinding:compiler':
Saiba que se você estivesse utilizando a linguagem Java somente o código a seguir, no
Gradle App Level, é que seria necessário para liberar o trabalho com a Data Binding API:
Classes de domínio e layout ainda sem tipos observáveis
A seguir alguns protótipos de classes e layout ainda sem uso dos tipos
observáveis, mas já trabalhando a sintaxe Data Binding.
Primeiro a classe Brand:
Então a classe Car:
Então o layout car.xml:
Todos os códigos apresentados funcionam sem problemas, mas em caso de
alguma das propriedades tanto de Brand quanto de Car ser atualizada, ainda é
preciso acessar a View a qual o propriedade está vinculada e então colocar o novo
valor nela para termos o reflexo da atualização também em tela.
Tipos observáveis de campo
Os tipos observáveis de campo são os seguintes:
• ObservableBoolean;
• ObservableByte;
• ObservableChar;
• ObservableShort;
• ObservableInt;
• ObservableLong;
• ObservableFloat;
• ObservableDouble;
• ObservableParcelable;
• ObservableField.
O termo "observáveis de campo" até mesmo aparenta que estaremos com um código
listener para dados de entrada do usuário, em um EditText, por exemplo. Mas na verdade
não, o "campo" é de propriedade, ou variável de instância.
Colocando tipos observáveis de campo no código de
exemplo
Para que as atualizações em objetos dos tipos Brand e Car sejam refletidas também
em tela sem a necessidade de códigos de acesso a Views por parte do desenvolvedor
poderíamos primeiro ter a seguinte nova classe Brand:
E então a seguinte nova classe Car:
A documentação de tipos observáveis Data Binding informa para sempre definirmos
esses tipos como somente de leitura, val. Poderemos utilizar o método set() para
atualizar o valor dentro do tipo observável. Se um novo objeto observável for setado na
propriedade, a igualdade de referência em layout será perdida e assim a atualização
não ocorrerá em tela, pois a propriedade em código dinâmico e a referência em layout
não mais apontam para o mesmo objeto observável.
Agora um pequeno algoritmo de atualização de dados em objetos, somente para teste
de atualização também em tela:
Note que quando trabalhando em código dinâmico, para acessar os valores dos
tipos observáveis temos de utilizar os métodos get() e set(), respectivamente para
acesso e atualização de valores.
No layout XML tudo continua do mesmo jeito, não há necessidade de invocar nem
mesmo o método get().
Executando o projeto com os novos códigos observáveis, temos:
Clique aqui para ativar a animação.
Coleções observáveis: ObservableArrayMap
Há dois tipos de coleções observáveis, vamos iniciar com a ObservableArrayMap. A seguir um
código trabalhando com uma coleção de objetos do tipo Car:
Então o layout car.xml atualizado:
No layout anterior é possível notar que há diferentes modos de acesso aos dados,
podemos trabalhar com o modelo convencional,
map["chave_de_acesso_ao_valor"], ou no modelo também aceito pela sintaxe
Data Binding, map.chave_de_acesso_ao_valor.
Também note a representação de ObservableArrayMap<String, Car> em sintaxe
Data Binding: ObservableArrayMap&lt;String, Car&gt;. Isso, pois os sinais > e <
não são aceitos como valores na sintaxe desta biblioteca.
Executando o projeto com o código anterior, temos:
Clique aqui para ativar a animação.
Coleções observáveis: ObservableArrayList
O outro tipo de coleção observável é o ObservableArrayList, um tipo mais próximo do que poderíamos
utilizar, por exemplo, junto a um adaptador de framework de lista, framework como o RecyclerView. A
seguir um código com um objeto ObservableArrayList sendo utilizado para conter um objeto Car:
Assim o layout car.xml atualizado:
Com ObservableArrayList podemos acessar os valores por meio do método get()
ou utilizando [].
Você não precisa utilizar números ou valores de chave diretamente em código XML
como fizemos no exemplo anterior e no exemplo com ObservableArrayMap. Você
pode colocar as chaves como valores estáticos de uma classe e então acessar
essas chaves com os rótulos definidos em classe, assim o código fica até mais
simples de entender.
Executando o projeto com o novo código, temos:
Clique aqui para ativar a animação.
Objeto observável
A outra maneira de se trabalhar com um tipo observável é herdando da classe
BaseObservable e então implementando as propriedades observáveis da maneira correta. A
seguir a atualização da classe Car:
Note a necessidade de marcar a entidade observável com a anotação @get:Bindable.
Depois, seguindo a sintaxe Kotlin, temos de sobrescrever o método set() de cada propriedade
que terá a característica de ser observável. Logo, aqui os campos têm de ser mutáveis, var.
field representa a propriedade do método set(), regra de sintaxe do Kotlin.
A classe BR é criada pela própria biblioteca Data Binding para conter a propriedade que
deverá ser notificada quando houver um novo valor para ela.
Pode ser necessário um "Build" e "Rebuild Project" para que a classe BR surja já com as
propriedades corretas.
O método notifyPropertyChanged() dispensa comentários, faz exatamente o que o rótulo
dele indica: notifica uma mudança em propriedade.
Note que com este modelo de tipo observável, apesar de termos de colocar mais códigos,
nós temos maior controle sobre quando notificar uma mudança.
Seguramente poderíamos colocar o método notifyPropertyChanged() dentro de
condicionais de avaliação para definir quando ele deve ou não ser invocado.
Uma última observação. A propriedade brand não precisa ter nenhum tipo observável nela.
Aqui vamos aproveitar a classe Brand já atualizada e então prosseguir assim. O trabalho com
o bloco init{} também não é obrigatório, aqui o fiz para manter a igualdade de inicialização de
objeto Car por meio do construtor, como fizemos nos outros slides.
Com isso podemos partir para um código de exemplo com a nossa nova versão de
Car:
Então o layout car.xml atualizado:
Executando o projeto com os novos códigos, temos:
Clique aqui para ativar a animação.
Tipos observáveis em adaptadores de listas
É importante falar também dos tipos observáveis em adaptadores de lista, pois a
principio o que pensamos é que as coleções observáveis nos permitem a fácil
inclusão / remoção de itens e atualização de qualquer um deles.
Na verdade a atualização de qualquer um dos itens já em lista realmente vai ser
refletida também em tela, assumindo que os objetos em lista têm suas
propriedades observáveis.
Mas mesmo quando trabalhando com uma coleção observável, adicionar ou
remover um item não tem efeito algum em tela.
Para que a adição (ou remoção) de um item tenha efeito visual, ainda é preciso
também invocar algum dos métodos de notificação de atualização de lista:
notifyDataSetChanged() ou notifyItemChanged().
Ou seja, ao menos para frameworks de lista, para termos efeito visual na adição,
remoção ou atualização de posição de item, os códigos permanecem os mesmos
quando não utilizando tipos observáveis.
Veja o hackcode a seguir:
Pontos negativos
• Os tipos de coleções observáveis têm o exato mesmo efeito em classe
adaptadora que qualquer outro tipo de coleção mutável. O processo de
adição, remoção e atualização de posição de item ainda exige a invocação de
algum método de notificação da classe adaptadora;
• A documentação não oferece exemplos implementando a Interface
Observable.
Ponto positivo
• Permite que nós desenvolvedores Android não mais tenhamos de se
preocupar também com os códigos de atualização de dados em tela.
Conclusão
Que a biblioteca Data Binding é importante você certamente já deve estar ciente,
principalmente em contexto de mercado de trabalho.
Os tipos observáveis desta biblioteca nos dão ainda mais arsenal de
programação, também por remover de nosso tempo de desenvolvimento a
necessidade de criar códigos de atualização de dados em tela.
Mas há um custo para isso: trabalhar os tipos da API ou implementar a classe
BaseObservable, está última que exige ainda mais linhas de código e
conhecimento Kotlin.
Fontes
Conteúdo completo, em texto e em vídeo, no link a seguir:
• Observable Binding Para Atualização na UI Android.
Fontes:
• Work with observable data objects;
• Documentação oficial ObservableParcelable;
• ObservableParcelable<String> is not working - Resposta de Виталий
Махнев.
Para estudo
• Treinamento oficial:
• Prototipagem Profissional de Aplicativos Android.
• Meus livros:
• Receitas Para Desenvolvedores Android;
• Refatorando Para Programas Limpos.
• Redes:
• Udemy;
• YouTube;
• Facebook;
• LinkedIn;
• GitHub;
• Twitter;
• Google Plus.
• Blog App.
Observable Binding Para
Atualização na UI Android
thiengo.com.br
Vinícius Thiengo
thiengocalopsita@gmail.com

Mais conteúdo relacionado

Mais procurados

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 AndroidVinícius Thiengo
 
Chips Android, Quando e Como Utilizar
Chips Android, Quando e Como UtilizarChips Android, Quando e Como Utilizar
Chips Android, Quando e Como UtilizarViní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 APIViní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 AndroidViní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 ZoomVinícius Thiengo
 
BottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando UtilizarBottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando UtilizarViní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 BlogViní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 AndroidViní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 NativoViní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 BlogVinícius Thiengo
 
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
 
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 AndroidVinícius Thiengo
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Ryan Padilha
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
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 01Walney Negreiros
 

Mais procurados (20)

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
 
Chips Android, Quando e Como Utilizar
Chips Android, Quando e Como UtilizarChips Android, Quando e Como Utilizar
Chips Android, Quando e Como Utilizar
 
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
 
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
 
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
 
BottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando UtilizarBottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando Utilizar
 
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
 
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
 
Apostila Android
Apostila AndroidApostila Android
Apostila 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
 
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)
 
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
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)
 
Iniciando com realm
Iniciando com realmIniciando com realm
Iniciando com realm
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Android Studio
Android StudioAndroid Studio
Android Studio
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
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
 
Angular 2
Angular 2Angular 2
Angular 2
 

Semelhante a Observable Binding Para Atualização na UI Android

Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Alexandre Tarifa
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 
Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)marcondes da luz barros
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Alex Guido
 
ODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para TabelasODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para TabelasCaio Lima
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLIVanessa Me Tonini
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...Dextra Sistemas / Etec Itu
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo TextoCaio Lima
 
Como criar interfaces gráficas com android
Como criar interfaces gráficas com androidComo criar interfaces gráficas com android
Como criar interfaces gráficas com androidRicardo Ogliari
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
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 Dojofabioginzel
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...JP Clementi
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net codersRenato Groff
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)Renato Groff
 

Semelhante a Observable Binding Para Atualização na UI Android (20)

Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Aula1
Aula1Aula1
Aula1
 
Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)Atividade integradora mod iii tec informatica 2016(1)
Atividade integradora mod iii tec informatica 2016(1)
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Grails
GrailsGrails
Grails
 
es6
es6es6
es6
 
Es6
Es6Es6
Es6
 
ODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para TabelasODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para Tabelas
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLI
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo Texto
 
Como criar interfaces gráficas com android
Como criar interfaces gráficas com androidComo criar interfaces gráficas com android
Como criar interfaces gráficas com android
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
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
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
 
C# 6.0 .net coders
C# 6.0   .net codersC# 6.0   .net coders
C# 6.0 .net coders
 
C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)C# 6.0 - Novos Recursos (Agosto/2015)
C# 6.0 - Novos Recursos (Agosto/2015)
 

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 LerViní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 lerViní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 AndroidViní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 CulturalVinícius Thiengo
 
Definindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos AndroidDefinindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos AndroidVinícius Thiengo
 
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 UsoVinícius Thiengo
 

Mais de Vinícius Thiengo (9)

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
 
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
 
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
 
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
 
Material Design
Material DesignMaterial Design
Material Design
 

Último

Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.MrPitobaldo
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptxthaisamaral9365923
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxssuserf54fa01
 
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfCD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfManuais Formação
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptxAULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptxLaurindo6
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 

Último (20)

Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptx
 
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfCD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptxAULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 

Observable Binding Para Atualização na UI Android

  • 1. Observable Binding Para Atualização na UI Android thiengo.com.br
  • 2. Para que os tipos observáveis de Data Binding? Quando trabalhando em projeto Android quase sempre temos de ter o trecho de código responsável por atualizar as visualizações em tela, isso, pois os objetos com os dados referenciados nas visualizações já foram atualizados e essa atualização precisa ser refletida ao usuário do aplicativo. Com os tipos observáveis da biblioteca Data Binding nós, desenvolvedores, não mais precisamos nos preocupar com essa parte do fluxo: invocações de métodos e visualizações para refletir a atualização de objetos também em tela. Há três categorias de classes observáveis dentro da Data Binding API: • Observáveis de campo (propriedade); • Observáveis de coleções; • Observáveis de objetos. Já lhe adianto que os observáveis de campo quase sempre serão os utilizados em desenvolvimento. Com isso podemos partir para os códigos de exemplo.
  • 3. Instalação da biblioteca No Kotlin a configuração de instalação da biblioteca Data Binding exige as seguintes referências no Gradle App Level, ou build.gradle (Module: app): Até o momento da construção deste conjunto de slides a versão estável mais atual da com.android.databinding era a 3.1.4.
  • 4. A versão da biblioteca é a mesma versão do plugin do Gradle, logo, no Gradle Project Level, ou build.gradle (Project: NomeApp), podemos ter: E então no Gradle App Level teríamos a atualização da referência 'com.android.databinding:compiler':
  • 5. Saiba que se você estivesse utilizando a linguagem Java somente o código a seguir, no Gradle App Level, é que seria necessário para liberar o trabalho com a Data Binding API:
  • 6. Classes de domínio e layout ainda sem tipos observáveis A seguir alguns protótipos de classes e layout ainda sem uso dos tipos observáveis, mas já trabalhando a sintaxe Data Binding. Primeiro a classe Brand: Então a classe Car:
  • 7. Então o layout car.xml: Todos os códigos apresentados funcionam sem problemas, mas em caso de alguma das propriedades tanto de Brand quanto de Car ser atualizada, ainda é preciso acessar a View a qual o propriedade está vinculada e então colocar o novo valor nela para termos o reflexo da atualização também em tela.
  • 8. Tipos observáveis de campo Os tipos observáveis de campo são os seguintes: • ObservableBoolean; • ObservableByte; • ObservableChar; • ObservableShort; • ObservableInt; • ObservableLong; • ObservableFloat; • ObservableDouble; • ObservableParcelable; • ObservableField. O termo "observáveis de campo" até mesmo aparenta que estaremos com um código listener para dados de entrada do usuário, em um EditText, por exemplo. Mas na verdade não, o "campo" é de propriedade, ou variável de instância.
  • 9. Colocando tipos observáveis de campo no código de exemplo Para que as atualizações em objetos dos tipos Brand e Car sejam refletidas também em tela sem a necessidade de códigos de acesso a Views por parte do desenvolvedor poderíamos primeiro ter a seguinte nova classe Brand: E então a seguinte nova classe Car: A documentação de tipos observáveis Data Binding informa para sempre definirmos esses tipos como somente de leitura, val. Poderemos utilizar o método set() para atualizar o valor dentro do tipo observável. Se um novo objeto observável for setado na propriedade, a igualdade de referência em layout será perdida e assim a atualização não ocorrerá em tela, pois a propriedade em código dinâmico e a referência em layout não mais apontam para o mesmo objeto observável.
  • 10. Agora um pequeno algoritmo de atualização de dados em objetos, somente para teste de atualização também em tela:
  • 11. Note que quando trabalhando em código dinâmico, para acessar os valores dos tipos observáveis temos de utilizar os métodos get() e set(), respectivamente para acesso e atualização de valores. No layout XML tudo continua do mesmo jeito, não há necessidade de invocar nem mesmo o método get(). Executando o projeto com os novos códigos observáveis, temos: Clique aqui para ativar a animação.
  • 12. Coleções observáveis: ObservableArrayMap Há dois tipos de coleções observáveis, vamos iniciar com a ObservableArrayMap. A seguir um código trabalhando com uma coleção de objetos do tipo Car:
  • 13. Então o layout car.xml atualizado:
  • 14. No layout anterior é possível notar que há diferentes modos de acesso aos dados, podemos trabalhar com o modelo convencional, map["chave_de_acesso_ao_valor"], ou no modelo também aceito pela sintaxe Data Binding, map.chave_de_acesso_ao_valor. Também note a representação de ObservableArrayMap<String, Car> em sintaxe Data Binding: ObservableArrayMap&lt;String, Car&gt;. Isso, pois os sinais > e < não são aceitos como valores na sintaxe desta biblioteca. Executando o projeto com o código anterior, temos: Clique aqui para ativar a animação.
  • 15. Coleções observáveis: ObservableArrayList O outro tipo de coleção observável é o ObservableArrayList, um tipo mais próximo do que poderíamos utilizar, por exemplo, junto a um adaptador de framework de lista, framework como o RecyclerView. A seguir um código com um objeto ObservableArrayList sendo utilizado para conter um objeto Car:
  • 16. Assim o layout car.xml atualizado:
  • 17. Com ObservableArrayList podemos acessar os valores por meio do método get() ou utilizando []. Você não precisa utilizar números ou valores de chave diretamente em código XML como fizemos no exemplo anterior e no exemplo com ObservableArrayMap. Você pode colocar as chaves como valores estáticos de uma classe e então acessar essas chaves com os rótulos definidos em classe, assim o código fica até mais simples de entender. Executando o projeto com o novo código, temos: Clique aqui para ativar a animação.
  • 18. Objeto observável A outra maneira de se trabalhar com um tipo observável é herdando da classe BaseObservable e então implementando as propriedades observáveis da maneira correta. A seguir a atualização da classe Car:
  • 19. Note a necessidade de marcar a entidade observável com a anotação @get:Bindable. Depois, seguindo a sintaxe Kotlin, temos de sobrescrever o método set() de cada propriedade que terá a característica de ser observável. Logo, aqui os campos têm de ser mutáveis, var. field representa a propriedade do método set(), regra de sintaxe do Kotlin. A classe BR é criada pela própria biblioteca Data Binding para conter a propriedade que deverá ser notificada quando houver um novo valor para ela. Pode ser necessário um "Build" e "Rebuild Project" para que a classe BR surja já com as propriedades corretas. O método notifyPropertyChanged() dispensa comentários, faz exatamente o que o rótulo dele indica: notifica uma mudança em propriedade. Note que com este modelo de tipo observável, apesar de termos de colocar mais códigos, nós temos maior controle sobre quando notificar uma mudança. Seguramente poderíamos colocar o método notifyPropertyChanged() dentro de condicionais de avaliação para definir quando ele deve ou não ser invocado. Uma última observação. A propriedade brand não precisa ter nenhum tipo observável nela. Aqui vamos aproveitar a classe Brand já atualizada e então prosseguir assim. O trabalho com o bloco init{} também não é obrigatório, aqui o fiz para manter a igualdade de inicialização de objeto Car por meio do construtor, como fizemos nos outros slides.
  • 20. Com isso podemos partir para um código de exemplo com a nossa nova versão de Car:
  • 21. Então o layout car.xml atualizado:
  • 22. Executando o projeto com os novos códigos, temos: Clique aqui para ativar a animação.
  • 23. Tipos observáveis em adaptadores de listas É importante falar também dos tipos observáveis em adaptadores de lista, pois a principio o que pensamos é que as coleções observáveis nos permitem a fácil inclusão / remoção de itens e atualização de qualquer um deles. Na verdade a atualização de qualquer um dos itens já em lista realmente vai ser refletida também em tela, assumindo que os objetos em lista têm suas propriedades observáveis. Mas mesmo quando trabalhando com uma coleção observável, adicionar ou remover um item não tem efeito algum em tela. Para que a adição (ou remoção) de um item tenha efeito visual, ainda é preciso também invocar algum dos métodos de notificação de atualização de lista: notifyDataSetChanged() ou notifyItemChanged(). Ou seja, ao menos para frameworks de lista, para termos efeito visual na adição, remoção ou atualização de posição de item, os códigos permanecem os mesmos quando não utilizando tipos observáveis.
  • 24. Veja o hackcode a seguir:
  • 25. Pontos negativos • Os tipos de coleções observáveis têm o exato mesmo efeito em classe adaptadora que qualquer outro tipo de coleção mutável. O processo de adição, remoção e atualização de posição de item ainda exige a invocação de algum método de notificação da classe adaptadora; • A documentação não oferece exemplos implementando a Interface Observable.
  • 26. Ponto positivo • Permite que nós desenvolvedores Android não mais tenhamos de se preocupar também com os códigos de atualização de dados em tela.
  • 27. Conclusão Que a biblioteca Data Binding é importante você certamente já deve estar ciente, principalmente em contexto de mercado de trabalho. Os tipos observáveis desta biblioteca nos dão ainda mais arsenal de programação, também por remover de nosso tempo de desenvolvimento a necessidade de criar códigos de atualização de dados em tela. Mas há um custo para isso: trabalhar os tipos da API ou implementar a classe BaseObservable, está última que exige ainda mais linhas de código e conhecimento Kotlin.
  • 28. Fontes Conteúdo completo, em texto e em vídeo, no link a seguir: • Observable Binding Para Atualização na UI Android. Fontes: • Work with observable data objects; • Documentação oficial ObservableParcelable; • ObservableParcelable<String> is not working - Resposta de Виталий Махнев.
  • 29. Para estudo • Treinamento oficial: • Prototipagem Profissional de Aplicativos Android. • Meus livros: • Receitas Para Desenvolvedores Android; • Refatorando Para Programas Limpos. • Redes: • Udemy; • YouTube; • Facebook; • LinkedIn; • GitHub; • Twitter; • Google Plus. • Blog App.
  • 30. Observable Binding Para Atualização na UI Android thiengo.com.br Vinícius Thiengo thiengocalopsita@gmail.com