una significa que para los imagenes imagen como atributos atributo agregar java android data-binding android-button android-databinding

java - para - que significa alt en una imagen



Enlace de datos de Android con la etiqueta de inclusiĆ³n (4)

Ejemplo completo fácil

Simplemente configure la id en el diseño incluido, y use binding.includedLayout.anyView .

Este ejemplo ayuda a pasar un valor a <include y acceder a las vistas incluidas en el código.

Paso 1

Tiene layout_common.xml , desea pasar String al diseño incluido.

TextView variable de String en el diseño y referirá esta String a TextView .

<data> // declare fields <variable name="passedText" type="String"/> </data> <TextView android:id="@+id/textView" ... android:text="@{passedText}"/> //set field to your view.

Paso 2

Incluya este diseño en el diseño principal. Dé una id al diseño incluido, para que podamos usar eso en la clase de enlace. Ahora puede pasar String passedText a su etiqueta <include .

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <LinearLayout .. > <include android:id="@+id/includedLayout" layout="@layout/layout_common" app:passedText="@{@string/app_name}" // here we pass any String /> </LinearLayout> </layout>

  • Puede usar ahora binding.includedLayout.textView en su clase.
  • Puede pasar cualquier variable al diseño incluido como se indicó anteriormente.

    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.includedLayout.textView.setText("text");

Nota Ambos diseños (principal e incluido) deben ser binding layout , envueltos con <layout

Nota de actualización:

El ejemplo anterior funciona correctamente , porque la versión 1.0-rc4 solucionó el problema de necesitar la variable innecesaria.

Pregunta original

Hago exactamente como se describe en la documentation y no 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''

¿Cómo obtener el botón?


El problema es que el diseño incluido no se considera un diseño vinculado a datos. Para hacerlo actuar como uno, debe pasar una variable:

buttons.xml:

<layout xmlns:andr...> <data> <variable name="foo" type="int"/> </data> <Button android:id="@+id/button" ...." />

main.xml:

<layout xmlns:andr... ... <include layout="@layout/buttons" android:id="@+id/buttons" app:foo="@{1}"/> ....

Luego puede acceder a los botones indirectamente a través del campo de botones:

MainBinding binding = MainBinding.inflate(getLayoutInflater()); binding.buttons.button

A partir de 1.0-rc4 (recién lanzado), ya no necesita la variable. Puedes simplificarlo a:

buttons.xml:

<layout xmlns:andr...> <Button android:id="@+id/button" ...." />

main.xml:

<layout xmlns:andr... ... <include layout="@layout/buttons" android:id="@+id/buttons"/> ....


Otra cosa interesante sobre esto es que puede pasar variables al diseño importado desde la carpeta de esta manera:

MainBinding binding = MainBinding.inflate(getLayoutInflater()); binding.buttons.setVariable(BR.varID, variable)


Puede hacer que su enlace funcione en su inclusión simplemente agregando una ID de esta manera:

<include android:id="@+id/loading" layout="@layout/loading_layout" bind:booleanVisibility="@{viewModel.showLoading}" />