Utilizar un BindingAdapter con una matriz de cadenas de los recursos

Tengo una idea casi simple: Quiero generar un adaptador para un hilandero con el enlace de datos API y un BindingAdapter. Aquí está el XML que quiero usar:

<Spinner android:id="@+id/country" android:layout_width="wrap_content" android:layout_height="wrap_content" app:value="@{address.country}" app:data="@{@array/countries}" app:keys="@{@array/iso_3166_2}"/> 

La dirección aquí es una clase simple que tiene un campo llamado country que es una cadena y contendrá una cadena ISO-3166-2. Para mantenerlo simple, los valores serán "DE" o "US".

Esto aquí es mi arrays.xml simplificado:

 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="iso_3166_2"> <item>DE</item> <item>US</item> </string-array> <string-array name="countries"> <item>@string/country_DE</item> <item>@string/country_US</item> </string-array> </resources> 

Para el enlace escribí este BindingAdapter:

 @BindingAdapter({"value", "data", "keys"}) public static void generateAdapter(Spinner spinner, String value, @ArrayRes int data, @ArrayRes int keys) { } 

Cuando intento compilar el código consigo este error:

Error: Error de ejecución para la tarea ': app: compileDebugJavaWithJavac'.
Java.lang.RuntimeException: Se encontraron errores de enlace de datos.
**** / error de enlace de datos **** msg: Los identificadores deben tener tipos definidos por el usuario del archivo XML. Países lo está perdiendo
Archivo: path / to / the / spinner-above.xml
Loc: 95: 31 – 95:39
**** \ error de enlace de datos ****

La línea 95 de mi xml es esta línea: app:value="@{address.country}"

¿Ves lo que estoy haciendo mal?

Por cierto no estoy seguro acerca de las anotaciones relacionadas con los recursos de la matriz es que correcto? No encuentro forma de limitarlo a una matriz de cadena.

Se puede obtener mediante la stringArray lugar de array . Esto es lo que he hecho con recyclerView para obtener el valor de los recursos y está funcionando perfectamente, podría ayudarle también.

En string.xml

 <string-array name="myItems"> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> <item>Item 4</item> <item>Item 5</item> <item>Item 6</item> </string-array> 

En layout.xml

 app:entries="@{@stringArray/fi}" 

En tu caso puede ser app:data="@{@stringArray/countries}" o app:keys="@{@stringArray/iso_3166_2}" .

Y en el método de encuadernación

 @BindingAdapter({"entries"}) public static void entries(RecyclerView recyclerView, String[] array) { //get all values in array[] variable. } 

Refiérase a esto para más información.

  • Cómo convertir de un ArrayList de matrices a una matriz de matrices
  • Bind array de cuerdas en el butterknife
  • Obtener valor específico de JSONArray
  • Array / Lista enlazada: ¿el rendimiento depende de la * dirección * del recorrido?
  • Devuelve una matriz String en un método JNI
  • Cómo convertir valores de cadena a lista de matriz de entero - Android
  • Parse json array android
  • Cómo poner / obtener varios JSONObjects a JSONArray?
  • Array detecta sólo una parte de una palabra de entrada en lugar de toda la palabra
  • ¿Cómo obtener una matriz de imágenes?
  • Cómo almacenar elementos seleccionados de un ExpandableListView en un ArrayList
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.