Ich habe eine fast einfache Idee: Ich möchte einen Adapter für einen Spinner mit der Datenbindungs-API und einem BindingAdapter generieren. Hier ist der XML ich verwenden möchte:Mit einem BindingAdapter mit einem String-Array aus den Ressourcen
<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}"/>
Adresse hier ist eine einfache Klasse, die ein Feld mit dem Namen hat country
, die ein String ist und wird eine ISO-3166-2 String enthalten. Um es einfach zu halten, sind die Werte "DE" oder "US".
Das hier ist meine vereinfachte 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>
Für die Bindung ich dieses BindingAdapter schrieb:
@BindingAdapter({"value", "data", "keys"})
public static void generateAdapter(Spinner spinner,
String value,
@ArrayRes int data,
@ArrayRes int keys) {
}
Wenn ich versuche, den Code ich diesen Fehler zu kompilieren:
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 ****
Zeile 95 meiner Xml ist diese Zeile: app:value="@{address.country}"
Siehst du, was ich falsch mache?
Übrigens bin ich nicht sicher über die Anmerkungen in Bezug auf die Array-Ressourcen ist das richtig? Ich finde es nicht möglich, es auf ein String-Array zu beschränken.
Interessant Ich werde es überprüfen. Ja! es funktioniert :-D – rekire