Mam prosty pomysł: chcę wygenerować adapter dla spinnera z API powiązania danych i BindingAdapter. Oto XML chcę użyć:Używanie BindingAdapter z tablicą ciągów z zasobów
<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}"/>
Adres tutaj jest prosta klasa, która ma pole o nazwie country
który jest ciągiem znaków i zawierać ISO-3166-2 String. Dla uproszczenia wartości będą miały wartość "DE" lub "US".
To tutaj jest mój uproszczony arrays.xml
:
<?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>
za wiązanie Napisałem ten BindingAdapter:
@BindingAdapter({"value", "data", "keys"})
public static void generateAdapter(Spinner spinner,
String value,
@ArrayRes int data,
@ArrayRes int keys) {
}
Kiedy próbuję skompilować kod otrzymuję ten błąd:
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Identifiers must have user defined types from the XML file. countries is missing it
file:path/to/the/spinner-above.xml
loc:95:31 - 95:39
****\ data binding error ****
Linia 95 mojego xml to linia: app:value="@{address.country}"
Czy widzisz, co robię źle?
Nawiasem mówiąc, nie jestem pewien co do adnotacji związanych z zasobami tablicy, czy to prawda? Nie znajduję sposób, aby ograniczyć go do tablicy ciągów.
Interesujące, sprawdzę to. Tak! działa :-D – rekire