【问题标题】:Using a BindingAdapter with a string-array in Kotlin在 Kotlin 中使用带有字符串数组的 BindingAdapter
【发布时间】:2019-03-03 18:45:35
【问题描述】:

我有以下 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.

我已遵循this 问题中的建议,但在这种情况下,String[] 的 Kotlin 等效项是什么?

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

谢谢!

【问题讨论】:

    标签: android kotlin android-databinding androidx android-binding-adapter


    【解决方案1】:

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

    实际代码是:

    @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)
    }
    

    修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-22
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 2015-09-11
      相关资源
      最近更新 更多