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
  • ¿Cómo insertar valores en matriz bidimensional de forma programática?
  • Tipos incompatibles, requeridos java.lang.Integer , encontrado Int ?
  • Objeto JSON de Android
  • Obtener una matriz JSON de retrofit Response
  • Cómo convertir valores de cadena a lista de matriz de entero - Android
  • ¿Cómo puedo almacenar una Matriz de Integer en SharedPreferences en Android?
  • Creación de matriz de números enteros de identificadores de recursos
  • Recuperar una matriz de parse.com y agregar los valores a una matriz local (Android)
  • Cómo obtener Android String Array si tengo el nombre de Array en otro String
  • Conversión de matriz de cadenas en matriz de números enteros
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.