40
#IO16Extended #IO16Recife

Data Binding Android - Levi Saturnino

Embed Size (px)

Citation preview

Page 1: Data Binding  Android - Levi Saturnino

#IO16Extended #IO16Recife

Page 2: Data Binding  Android - Levi Saturnino

+LeviSaturnino

@levisaturnino

[email protected]

Page 3: Data Binding  Android - Levi Saturnino

DATA BINDING

Android - Levi Saturnino

Page 4: Data Binding  Android - Levi Saturnino

A API de DataBinding foi lançada no Google I/O de 2015 e tem o intuito de

facilitar a vida dos desenvolvedores removendo da Activity/Fragment muita da

lógica de UI feitas por esses componentes.

Apesar de ter sido lançado juntamente com o Android 6, a API de Data Binding é

uma biblioteca separada do sistema operacional e pode ser utilizada a partir do

Android 2.1 (API Level 7).

Page 5: Data Binding  Android - Levi Saturnino
Page 6: Data Binding  Android - Levi Saturnino

CONFIGURAÇÃO NO GRADLEPara configurar seu aplicativo para usar a ligação de dados,

adicione o elemento dataBinding ao seu arquivo build.gradle no

módulo de aplicação. Use o seguinte trecho de código para

configurar a ligação de dados:

android {

....

dataBinding {

enabled = true

}

}

Page 7: Data Binding  Android - Levi Saturnino

Três coisas que por si só já valem a utilização do Data Binding são:

(1) não utilizar findViewById;

(2) associação de eventos a componentes ;

(3) sincronização de valores do model para a view.

Page 8: Data Binding  Android - Levi Saturnino
Page 9: Data Binding  Android - Levi Saturnino
Page 10: Data Binding  Android - Levi Saturnino
Page 11: Data Binding  Android - Levi Saturnino
Page 12: Data Binding  Android - Levi Saturnino
Page 13: Data Binding  Android - Levi Saturnino

COM DATA BINDING

Page 14: Data Binding  Android - Levi Saturnino
Page 15: Data Binding  Android - Levi Saturnino
Page 16: Data Binding  Android - Levi Saturnino
Page 17: Data Binding  Android - Levi Saturnino
Page 18: Data Binding  Android - Levi Saturnino
Page 19: Data Binding  Android - Levi Saturnino
Page 20: Data Binding  Android - Levi Saturnino
Page 21: Data Binding  Android - Levi Saturnino

Exemplo de parametros strings.xml

No xml<string name="resource1">Hello string: %1$s, and hello float: %2$.2f.</string>

No JavaString svalue = "test";

float sfloat= 3.1415926;

String sresult = getString(R.string.resource1, svalue, sfloat);

Page 22: Data Binding  Android - Levi Saturnino

RecursosPodemos acessar os recursos da aplicação normalmente.

Se tivéssemos este texto no strings.xml

<string name="nomeComSobrenome">%1$s %2$s</string>

Poderiamos utilizar o recurso com o Data Binding da seguinte forma:

android:text=”@{@string/nomeComSobrenome(usuario.nome,usuario.sobrenome)}”

Todos os recursos podem ser acessados, mas alguns tem uma notação especial:

@stringArray, @intArray, @animator, @color, @colorStateLis e @typedArray.

Page 23: Data Binding  Android - Levi Saturnino
Page 24: Data Binding  Android - Levi Saturnino

<string name="priceFormat">%1$.2f</string>

Page 25: Data Binding  Android - Levi Saturnino
Page 26: Data Binding  Android - Levi Saturnino
Page 27: Data Binding  Android - Levi Saturnino
Page 28: Data Binding  Android - Levi Saturnino
Page 29: Data Binding  Android - Levi Saturnino
Page 30: Data Binding  Android - Levi Saturnino
Page 31: Data Binding  Android - Levi Saturnino
Page 32: Data Binding  Android - Levi Saturnino

Passo a Passo para

implementação do Data Binding

Page 33: Data Binding  Android - Levi Saturnino

POJO USUARIO

public class Usuario {

public String nome;

public String sobrenome;

public Usuario(String nome, String sobrenome) {

This.nome = nome;

This.sobrenome = sobrenome;

}

}

Page 34: Data Binding  Android - Levi Saturnino

Outro exemplo com BaseObservableimport android.databinding.BaseObservable;

import android.databinding.ObservableField;

public class Usuario extends BaseObservable {

public ObservableField<String> nome = new ObservableField<>();

public ObservableField<String> sobrenome = new ObservableField<>();

public Usuario(String nome, String sobrenome) {

this.nome.set(nome);

this.sobrenome.set(sobrenome); }

}

Page 35: Data Binding  Android - Levi Saturnino

Classe do Evento

public class TratadorMagico {

public boolean longClick(View v){

Log.d("Script", "longClick!");

return true;

}

public void click(View v){

Log.d("Script", "click!");

}

}

Page 36: Data Binding  Android - Levi Saturnino

Layout XML - ROOT

<layout xmlns:android="http://schemas.android.com/apk/res/android">

<data>

<variable

name="usuario"

type="dominando.android.databinding.Usuario" />

<variable

name="tratador"

type="dominando.android.databinding.TratadorMagico"/>

</data>

Page 37: Data Binding  Android - Levi Saturnino

<LinearLayout android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center" android:orientation="vertical">

<TextView android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@{usuario.nome +' '+ usuario.sobrenome}"

android:onClick="@{tratador.click}"

android:onLongClick="@{tratador.longClick}"/>

<EditText android:id="@+id/edtNome"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

<EditText android:id="@+id/edtSobrenome"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

</LinearLayout>

</layout>

Page 38: Data Binding  Android - Levi Saturnino

Classe do MAINpublic class MainActivity extends AppCompatActivity {

Usuario usuario;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

ActivityMainBinding binding =

DataBindingUtil.setContentView(this, R.layout.activity_main);

usuario = new Usuario("Levi", "Saturnino");

binding.setUsuario(usuario);

binding.setTratador(new TratadorMagico());

}

Page 39: Data Binding  Android - Levi Saturnino

Tela final

Page 40: Data Binding  Android - Levi Saturnino

Referências

Palestra sobre Data Binding no Android Dev Summit (em inglês)

https://www.youtube.com/watch?v=NBbeQMOcnZ0

Hangout com o Neto Marin (Google Developer Advocate)

https://www.youtube.com/watch?v=JWpn4yyIJxc

Blog de Nelson Glauber

http://www.nglauber.com.br/2016/05/android-data-binding.html

Data Binding Guide (Documentação oficial)

http://developer.android.com/intl/pt-br/tools/data-binding/guide.html