domingo, 15 de julho de 2018

Rumo ao Certificado Android: Data Binding com Layout

O que é?
Para evitar pesquisar no layout a view desejada, podemos definir um vínculo com a view e uma variável de uma classe. Este processo é denominado Data Binding.

Como utilizar?
Existem 5 passos para poder utilizar o Data Binding:

1. Habilitar o Data Binding no build.gradle, isso é feito dentro da seção android, como mostra o código abaixo:

android{
  dataBinding.enabled = true;
}

2. Adicionar <layout> como tag raíz da interface, Android vai criar automaticamente uma classe de Binding para os xml de layout que possuir esta tag como raíz, como mostra o exemplo abaixo:

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

</layout>


3. Criar uma instância de Binding. Depois do passo 2, o Android deve criar as classes de binding baseadas no nome do arquivo XML dos layouts. Por exemplo, um arquivo xml com o nome "activity_main.xml" gerará uma classe chamada ActivityMainBinding. Onde você gerenciar os bindings, tenha certeza de instanciar esta classe para poder realizar os bindings.

4. Setar a view de conteúdo usando o DatabindingUtil, aqui nós vamos inflar o layout para o Data Binding. Usaremos o método estático setContentView da classe DataBindingUtil para isto. Ele leva dois parâmetros, a primeira a atividade e o segundo, a referência do layout a ser inflado. O código abaixo mostra um exemplo combinado do passo 3 e 4:

public class NameActivity extends Activity{
   ActivityNameBinding binding;

   @Override
   protected void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);

     binding = DataBindingUtil.setContentView(this, R.layout.activity_name);
   }

}

5. Vincular cada atributo da view com seus respectivos dados. A melhor maneira de fazer isso é criar uma classe modelo dos atributos que vão ser vinculados, e então, na atividade, usar cada atributo do objeto de bind com o atributo do modelo, como no exemplo abaixo:

public class NameActivity extends Activity{
   
   ActivityNameBinding binding;

   public void vincular(){
      Model m = loadModel(); //apenas abstrai que obtém o dado aqui

     binding.textViewString1.setText(m.string1);
     binding.textViewString2.setText(m.string2);
     binding.textViewString3.setText(m.string3);
   }

   public class Model{
      public string string1;
      public string string2;
      public string string3;
   }
}




Nenhum comentário:

Postar um comentário