使用DataBinding访问整数数组

时间:2016-08-17 06:14:34

标签: android data-binding android-databinding

我正在尝试使用DataBinding for Integer数据创建RecyclerView,我已经通过在string-array中声明string.xml来尝试使用字符串数据,here是来自在哪里我参考了。

现在我尝试使用integer-array实现它,但无法从xml访问它。

这是我的integer.xml

<integer-array name="hours">
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
    <item>6</item>
    <item>7</item>
    <item>8</item>
    <item>9</item>
    <item>10</item>
    <item>11</item>
    <item>12</item>
</integer-array>

这是我的xml文件

<android.support.v7.widget.RecyclerView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:entries="@{@integerArray/hours}">

和我的自定义绑定适配器

@BindingAdapter("entries")
public static void entries(RecyclerView recyclerView, Integer[] array) {
    recyclerView.setAdapter(new SimpleArrayAdapter(array));
}

但它显示错误line 1:0 token recognition error at: '@integerArray/'

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. hours is missing

2 个答案:

答案 0 :(得分:5)

document本身找到解决方案,我犯了愚蠢的错误。它应该是intArray而不是integerArray,而BindingAdapter应该是int[]

app:entries="@{@intArray/hours}"

和适配器应该是

@BindingAdapter("entries")
public static void entries(RecyclerView recyclerView, int[] array) {
    recyclerView.setAdapter(new SimpleArrayAdapter(array));
}

答案 1 :(得分:0)

感谢您的回答。在这里,我想分享从integer-array Drawable资源绑定图像的类似解决方案。

我的integer-array的{​​{1}}资源

Drawable

我的<resources> <integer-array name="platform_images"> <item>@drawable/android</item> <item>@drawable/iphone</item> <item>@drawable/windows</item> </integer-array> </resources> 功能:

BindingAdapter

我的object DataBindingUtil { @BindingAdapter("imageIndex", "images") @JvmStatic fun setImageResource(imageView: ImageView, imageIndex: Int, images: TypedArray) { imageView.setImageResource(images.getResourceId(imageIndex, 0)) } }

ImageView