Nota de atualização:
O exemplo acima funciona corretamente , porque a versão 1.0-rc4 corrigiu o problema de precisar da variável desnecessária.
Questão original:
Eu faço exatamente como está descrito na documentação e não funciona:
main.xml:
<layout xmlns:andr...
<data>
</data>
<include layout="@layout/buttons"></include>
....
buttons.xml:
<layout xmlns:andr...>
<data>
</data>
<Button
android:id="@+id/button"
...." />
MyActivity.java:
... binding = DataBindingUtil.inflate...
binding.button; ->cannot resolve symbol 'button'
como obter o botão?
java
android
data-binding
android-button
android-databinding
Kamil Nekanowicz
fonte
fonte
<include layout="@layout/buttons" android:id="@+id/buttons"/>
. Você ainda precisa do id para que ele produza um campo público para você para que possa acessar a Visualização de botões.binding.{id of include tag}.button
vez debinding.button
. Levei um tempo para descobrir.Exemplo Completo Fácil
Este exemplo ajuda a passar um valor para
<include
e acessar as visualizações incluídas no código.Passo 1
Você tem
layout_common.xml
, deseja passarString
para o layout incluído.Você criará uma
String
variável no layout e se referiráString
a elaTextView
.Passo 2
Inclua este layout no layout pai. Forneça um
id
layout incluído, para que possamos usá-lo na classe de ligação. Agora você pode passar StringpassedText
para sua<include
tag.activity_main.xml
binding.includedLayout.textView
em sua classe.Você pode passar qualquer variável para o layout incluído como acima.
Nota Ambos os layouts (pai e incluídos) devem ser
binding layout
embalados com<layout
fonte
binding.includedLayout.button.setOnClickListener
seria a alternativa, mas e se eu quiser usar oonClick
atributo em XML em si?OnClickListener
para o layout incluído. até você pode passar qualquer coisa na ligação. Verifique esta resposta, se precisar de mais ajuda, me avise. stackoverflow.com/a/51722829/6891563passedText
. A única diferença é que não incluo o código MainActivity porque só quero passar o recurso de string em <include> e deixá-lo assim. Por que está sempre em branco?Outra coisa interessante nisso é que você pode passar variáveis para o layout importado do fichário assim:
fonte
Você pode fazer seu bind funcionar em seu include apenas adicionando um ID a ele assim:
fonte
apenas defina um id para o seu layout de inclusão
então
BUTTONSBINDING
é res / layout / buttons.xmlagora :
fonte