Coberta de Dados Andróide

Vejamos como preparar o seu ambiente de desenvolvimento para trabalhar com a Biblioteca de Encadernação de Dados, incluindo suporte para código de encadernação de dados no Android Studio.

Passo 1. Habilitar databinding:

Para usar data binding em nosso projeto nós temos que habilitá-lo em app level build.gradle file.

dataBinding {
enabled = true
}

Step 2. Mude o arquivo de layout para ser utilizado com data-binding:

A linguagem de expressão permite que você escreva expressões que conectem variáveis às views no layout. A Data Binding Library gera automaticamente as classes necessárias para ligar as vistas no layout com seus objetos de dados. A biblioteca fornece recursos como importação, variáveis e inclui recursos que você pode usar em seus layouts.

Para que o layout use dados vinculados a vista mais alta no layout deve ser <layout> view ou em outros termos, temos que envolver todo o layout em <layout> tag like this:

<layout>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Para usar dados de outras classes ou objetos, temos que criar um objeto de dados dentro do arquivo de layout e declarar essa classe ou variável do objeto dentro dele.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Para evitar erros todos os nomes de pacotes devem começar com o alfabeto minúsculo e todos os nomes das classes de dados devem começar com o alfabeto maiúsculo.

Passo 3. Crie um objeto binding no arquivo activity/fragment:

Agora é hora de conectar nosso layout à activity/fragment usando data-binding.

Criar um objeto binding no arquivo:
O tipo de binding é derivado do nome do arquivo de layout. e.g. se o nome do arquivo de layout era activity_main.xml, então data-binding irá criar uma classe chamada ActivityMainBinding e este ficheiro irá incluir todas as propriedades e funções necessárias.

private lateinit var binding: ActivityMainBindingorprivate lateinit var binding: FragmentGameBinding

Initializar a variável binding no método onCreate():

Agora temos de inicializar o binding e substituir o método setContentView () existente. Isso pode ser feito chamando a classe DataBindingUtil ou diretamente usando o tipo de binding.

Para o tipo de binding de atividade não pode ser usado.

//for activity (in onCreate())
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)//for fragment (in onCreateView())
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_game, container, false)orbinding = FragmentGameBinding.inflate(inflater)

Passo 4. Use o objeto binding:

Agora podemos usar o binding que criamos para dois propósitos:

  1. Substituindo todas as chamadas para findViewById ou apenas as importações sintéticas por binding.<view’s id>.

e.g se houver uma vista de texto no layout com id sample_text, devemos estar usando isto de uma das duas formas dadas

findViewById<TextView>(R.id.sample_text).apply{
text = "dummy text"
}or simply using synthetic importsample_text.text = "dummy_text"

Agora isto será substituído por

binding.sampleText.text = "dummy_text"

Nota o nome da propriedade na classe binding é apenas a forma camelcase do ID da vista.

e.g sample_text torna-se sampleText

2. Definindo a variável declarada no objeto de dados no layout e depois usando-a no arquivo de layout.

Se o arquivo de layout tem uma variável chamada “user”

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.myapp.data.User" />
</data>
<ConstraintLayout… /> <! - UI layout's root element →
</layout>

Então temos que definir isto na atividade/fragmento

binding.user = User()

E agora podemos usar isto para preencher os dados das views.

e.g se houver uma vista de texto que exibe o nome do usuário, então podemos usar a sintaxe @{} para definir o valor.

<TextView 
...
android:text="@{user.userName}"
...
/>

Desta forma, podemos evitar muito código a ser feito para definir as vistas de forma programática e deixar que a encadernação de dados cuide disso.

Leave a Reply