1. Introdução
DataBinding é uma estrutura de componentes do Google Android que gerencia a ligação entre visualização e dados. DataBinding gerencia principalmente vários arquivos de layout, para que não tenhamos que instanciar a visualização do layout. A inicialização é feita diretamente por meio de DataBindingUitl.
Isso pode simplificar o código, reduzir a carga de trabalho e evitar o ponteiro nulo da exibição. O código no módulo Atividade/fragmento é bastante reduzido. O DataBinding realiza a ligação unidirecional ou bidirecional de dados ao arquivo de layout, o que ajuda a evitar vazamentos de memória e pode executar automaticamente a detecção nula para evitar ponteiros nulos.
2. Como usar
1. Apresentar a biblioteca de DataBinding
Basta adicionar o seguinte no nó{} android no arquivo de compilação do módulo
dataBinding { ativado = verdadeiro }
Isso abre a biblioteca dataBinding, sincroniza o projeto e sincroniza a biblioteca com o local
2. Criação de layout e geração de arquivo de layout
1. Crie um novo arquivo de layout chamado: layout_databinding_simple
Existem duas maneiras de vincular o layout com DataBinding
O primeiro: preenchimento automático do IDE
Mova o mouse sobre o código de layout, haverá um prompt de luz amarela e selecione Converter em layout de vinculação de dados
A ferramenta IDE concluirá automaticamente a transcodificação do layout do layout
A segunda maneira: faça manualmente
Altere o layout raiz para layout, o layout raiz original permanece inalterado e adicione um nó de dados na parte superior do layout
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
</data>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
</layout>
3. O arquivo de layout gera o arquivo de código correspondente
Após a configuração do layout, o IDE gerará automaticamente os arquivos correspondentes
nome do layout: layout_databinding_simple
Nome do arquivo gerado: LayoutDatabindingSimpleBinding, o formato é que o nome do arquivo de layout é sufixado com Binding
Observação: em relação à geração deste arquivo, muitos blogs técnicos não o apresentaram, mas simplesmente disseram uma frase, o que fez com que muitos novatos encontrassem o arquivo com o sufixo Binding.
Defina manualmente o nome do arquivo gerado pelos dados
<data class="MyTestData">
<variable
name="name"
type="String" />
</data>
Desde que o nome da classe seja definido no nó de dados, os dados gerarão um arquivo definido pelo usuário, caso contrário, o método padrão do sistema será usado.
lateinit var data:MyTestData;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
data=DataBindingUtil.setContentView<MyTestData>(this, R.layout.layout_databind_data)
}
4. Carregue o arquivo de layout e gere o controlador correspondente
Conclua a configuração e o carregamento da exibição por meio da classe de ferramenta DataBindingUtil
var databinding = DataBindingUtil.setContentView<LayoutDatabindingSimpleBinding>( this, R.layout.layout_databinding_simple )
1.setContentView<T>
T: O tipo genérico passa diretamente a classe LayoutDatabindingSimpleBinding correspondente gerada pelo layout do layout,
Após o carregamento, a visualização foi inicializada, inclusive internamente, gerencie a visualização e os dados diretamente por meio da vinculação de dados
5. Introdução ao ViewDataBinding
ViewDataBinding é a classe de gerenciamento de exibição e dados, se você estiver em
Se você tiver um ID TextView no layout como textname, poderá obter o objeto diretamente com databinding.textname
Se você tiver um nó chamado name no nó de dados de dados de layout, poderá definir a fonte de dados por meio de databinding.setName()
Os dados vinculados no layout são definidos e atualizados por meio de ViewDataBinding
1. Atualizar dados
<dados>
</data>
2. Obter visualização
A visualização obtida está diretamente relacionada ao id correspondente. Se o id não for declarado, ele não aparecerá na vinculação
5. Vinculação de dados
A vinculação da fonte de dados é muito importante. Sem a fonte de dados, a exibição não tem valor prático.
Como simplesmente vincular a fonte de dados?
1. Defina a fonte de dados
Tipo simples, tipo complexo, definido pelo usuário, tipo simples, sob o pacote Java.lang, pode ser usado diretamente sem importar. Para conteúdo não simples, você precisa importar o pacote correspondente ao usá-lo, como segue:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="com.example.wiik.testdemo.databinding.data.MyPerson" />
<variable
name="person"
type="MyPerson" />
<variable
name="name"
type="String" />
<variable
name="age"
type="String" />
<variable
name="sex"
type="Boolean" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名 :" />
<TextView
android:id="@+id/textname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{name}" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="年纪 :" />
<TextView
android:id="@+id/textage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{age}" />
</LinearLayout>
</LinearLayout>
</layout>
Existem dois sob o nó de dados
1.import: O caminho da solução para importar variáveis, que é um conceito com a introdução no pacote
Import é a classe principal, que é fornecida para uso de variável, mas import também pode fornecer nomes de variáveis personalizados para classes importadas: alias
<import
alias="MyDaya"
type="com.example.wiik.testdemo.databinding.data.Data" />
alias: é para resolver o nome da variável personalizada de importação. Sabemos que o mesmo nome de arquivo não pode aparecer com o mesmo nome de pacote. Se tivermos classes de dados com nomes de pacote diferentes, importe-os para o layout xml por meio de importação e descubra que o nome da classe já existe. Neste momento, personalizamos um variável através do nome alternativo pode ser resolvida.
<variable
name="data"
type="MyDaya" />
2. variável: declaração da variável, nome=definição nome, tipo: tipo
2. visualizar vinculação de dados
Se os dados da exibição precisarem ser vinculados, a fonte de dados vem das configurações no nó de dados.
Formato dos dados vinculados: @{variável}
1. Vinculando dados complexos: @{person.name}
2. Basta consultar o nome dos dados diretamente
<TextView
android:id="@+id/textage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{age}" />
3. Tratamento de erros
No caso do seguinte erro, no texto gerado
Isso ocorre porque o layout do layout falhou ao gerar o arquivo java ou kt correspondente. Como o nó de dados ou exibição do layout tem um erro ao fazer referência,
solucionar problemas
1. Exclua a referência @{} dos dados na exibição
Exclua a associação de dados e, em seguida, sincronize os dados para ver se a solução de problemas foi concluída
2. Erro de referência de dados do nó de dados
A primeira etapa não foi resolvida após a investigação. Comece a investigar o nó de dados, cancele o tipo de dados complexo e verifique se o tipo no nó variável pode ser associado ao código. Se não puder ser associado, significa que o tipo tipo está errado
Em segundo lugar, verifique se a importação está correta e associe diretamente o código através do ide.Se conseguir pular normalmente, significa que a associação está normal.
Após a conclusão da investigação acima, sincronize a ferramenta ide novamente e gere novamente os arquivos correspondentes.