0

我有以下 BindingAdapter:

@BindingAdapter("entries")
fun setEntries(view: Spinner, entries: Array<String>) {
    // Do something
}

在我的 XML 文件上:

<Spinner
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:entries="@{@stringArray/my_string_array}"/>

但是在构建时,我收到一个错误:

e: [kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'app:entries' with parameter type java.lang.String[] on android.widget.Spinner.

我遵循了这个问题中的建议,但在这种情况下,Kotlin 的等价物是String[]什么?

或者,或者,我可以将实际resource id而不是字符串数组传递给绑定适配器吗?

谢谢!

4

1 回答 1

0

好吧,提供的代码不会重现错误,因为它在第二个参数中,我天真地认为它与问题无关,所以省略了。

实际代码是:

@BindingAdapter("entries", "hint", requireAll = false)
fun setHintAdapter(view: Spinner, entries: Array<String>, @StringRes hintRes: Int?) {

    val hint = hintRes?.run {
        try {
            MainAct.i.getString(this)
        } catch (e: Resources.NotFoundException) {
            null
        }
    } ?: ""

    val layout = android.R.layout.simple_spinner_item

    view.adapter = HintAdapter(hint, view.context, layout, entries)
}

和 XML:

<Spinner
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:entries="@{@stringArray/my_string_array}"
    app:hint="@{@string/some_string}"/>

该错误与 完全无关app:entries,它在app:hint. 我正在提供一个String并期待一个Int(嗯,一个 StringRes)。

将其更改为:

@BindingAdapter("entries", "hint", requireAll = false)
fun setHintAdapter(view: Spinner, entries: Array<String>, hint: String) {

    val layout = android.R.layout.simple_spinner_item

    view.adapter = HintAdapter(hint, view.context, layout, entries)
}

修复它。

于 2019-03-04T01:16:14.643 回答