2016-04-27 16 views
5

Tôi có gần như ý tưởng đơn giản: Tôi muốn tạo Bộ điều hợp cho bộ quay với API ràng buộc dữ liệu và BindingAdapter. Đây là XML Tôi muốn sử dụng:Sử dụng BindingAdapter với một mảng chuỗi từ các tài nguyên

<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}"/> 

Địa chỉ đây là một lớp đơn giản trong đó có một lĩnh vực được gọi country mà là một String và sẽ chứa một chuỗi ISO-3166-2. Để giữ cho nó đơn giản, các giá trị sẽ là "DE" hoặc "US".

này ở đây là của tôi đơn giản 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> 

Đối với các ràng buộc tôi đã viết BindingAdapter này:

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

} 

Khi tôi cố gắng để biên dịch mã tôi nhận được lỗi này:

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 ****

Dòng 95 của xml của tôi là dòng này: app:value="@{address.country}"

Bạn có thấy những gì tôi đang làm sai không?

Bằng cách này tôi không chắc chắn về các chú thích có liên quan đến tài nguyên mảng đó có đúng không? Tôi không tìm cách để giới hạn nó vào một mảng chuỗi.

Trả lời

5

bạn có thể tải xuống bằng cách tham chiếu stringArray thay vì array. Đây là những gì tôi đã làm với recyclerView để có được giá trị từ các nguồn lực và nó hoạt động hoàn hảo, nó có thể giúp bạn.

trong 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> 

trong Layout.xml

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

trong trường hợp của bạn nó có thể được app:data="@{@stringArray/countries}" hoặc app:keys="@{@stringArray/iso_3166_2}".

và trong phương pháp ràng buộc

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

tham khảo this để biết thêm.

+1

Thú vị tôi sẽ kiểm tra. Yeah! nó hoạt động :-D – rekire

Các vấn đề liên quan