Não obtive respostas satisfatórias. Portanto, aqui estão as dicas que são um resumo do meu conhecimento de vinculação de dados.
Dicas para resolver problemas de DataBinding
Atualizar
Para obter erros e sugestões mais precisos , recomendo fortemente atualizar o Android Studio e a versão do plugin do Gradle para a versão mais recente. Porque não estou enfrentando muitos problemas após a versão AS 3.2.
Consulte o mais recente Android Studio e o mais recente plug-in do Gradle .
Solução Orignal
Depois de ler esta resposta, você não ficará preso a problemas de geração automática de vinculação de dados para classes e variáveis de dados .
Verifique esses pontos um por um. Qualquer um deles pode fazer seu trabalho. O ponto 3 ao final é muito importante, por isso não os perca.
1. Verifique se a vinculação de dados está ativada
Você deve ter a vinculação de dados ativada em build.gradle
. Se não, adicione isso e sincronize .
android {
...
dataBinding {
enabled = true
}
...
}
2. Verifique se o layout é convertido em layout de ligação
Agora, se você deseja que a classe de ligação de dados seja gerada, você deve envolver xml layout
com a ligação de dados ( <layout
tag). Algo assim.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
</layout>
Junto com isso, verifique se os nomes das variáveis de ligação estão corretos como na classe do modelo de visualização
3. Nome da classe de vinculação gerado automaticamente?
Sua classe de ligação de dados deve ser gerada após a criação do layout de ligação.
Se o seu nome layout é no caso de cobra activity_main.xml
, em seguida, classe de ligação de dados será gerado no caso de camelo como ActivityMainBinding
.
4. Não consegue ver a sugestão de importação?
Às vezes, ao digitar ActivityMai...
, não há sugestão , nesse caso importe manualmente .
import <yourpackage>databinding.ActivityMainBinding;
5. Leia Build Fail Logcat
Sua classe de ligação e novas variáveis no layout não serão geradas se sua construção falhar. Portanto, primeiro faça o projeto com Ctrl + F9 (Build> Make project) .
- Se uma construção falhar, veja o que é um erro, geralmente temos erros nos campos de layout. Os logs de erros indicarão o número da linha de erro com o problema.
- A vinculação pode falhar e causar algum erro estúpido , como erro de sintaxe ou importação ausente. Nesse caso, você obterá o logcat cheio de erros de classes de ligação. Mas você deve ler o logcat completo para encontrar o problema apropriado .
6. Feche e abra o projeto do recente
Sempre faço isso porque leva muito menos tempo do que Rebuild
/ Make
project.
- Fechar projeto em Arquivo> Fechar Projeto
- Abra novamente a partir do recente
Observe que eu prefiro Fechar e Abrir do Recente porque leva muito menos tempo do que Reconstruir / Reiniciar IDE .
7. Projeto de reconstrução
Se ainda assim sua classe não é gerada. (Algum tempo quando colamos o arquivo de layout, então acontece). Em seguida, reconstruir projeto de Build> Rebuild
( não construir ou criar projeto ). Ele irá gerar sua classe de vinculação de dados. ( Rebuild faz mágica para mim. )
8. Tenha o Android Studio mais recente
Depois de atualizar o AS para o Android Studio 3.2 , senti muitos bugs serem corrigidos na geração automática de vinculação de dados. Portanto, você também deve ter o AS mais recente.
Solução para <variables
<data>
<variable
name="item"
type="com.package.Model"/>
</data>
Normalmente, quando colocamos uma variável no layout, ele cria um getter e um setter dela. E podemos usar binding.setItem(item);
e binding.getItem();
, mas se você não conseguir ver esses métodos, leia as informações abaixo.
1. Feche e abra o projeto do recente
Se você criou uma variável de dados - <variable
em seu layout e ela não mostra seu setter e getter na classe de vinculação de dados, feche e abra do recente seu projeto.
2. Limpe o projeto após mudar o tipo
Se você alterou o tipo de algum <variable
em seu layout e o tipo de setter getter não muda, então Clean project ( Build> Clean Project
)
Palavras finais
Finalmente, se ainda assim sua classe de ligação não for gerada, temos nossa arma mais poderosa. - Reinicie o Android Studio: D
- Primeiro, tente apenas reiniciar , isso sempre gera variáveis do meu layout de ligação após reiniciar.
- Se não funcionar, invalide o cache e reinicie .
Isso é tudo que eu faço para resolver meus erros de vinculação de dados. Se você tiver mais problemas, pode comentar aqui.
dataBinding.enabled
em seu build.gradle?