Upload
levi-saturnino
View
174
Download
3
Embed Size (px)
Citation preview
#IO16Extended #IO16Recife
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).
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
}
}
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.
COM DATA BINDING
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);
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.
<string name="priceFormat">%1$.2f</string>
Passo a Passo para
implementação do Data Binding
POJO USUARIO
public class Usuario {
public String nome;
public String sobrenome;
public Usuario(String nome, String sobrenome) {
This.nome = nome;
This.sobrenome = sobrenome;
}
}
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); }
}
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!");
}
}
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>
<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>
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());
}
Tela final
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