在 Kotlin 中使用带字符串数组的 BindingAdapter
Using a BindingAdapter with a string-array in Kotlin
我有以下 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.
我遵循了 问题中的建议,但在这种情况下,String[]
的 Kotlin 等价物是什么?
或者,我可以将实际的 resource id
而不是字符串数组传递给绑定适配器吗?
谢谢!
好吧,错误不会用提供的代码重现,因为它在第二个参数中,我天真地忽略了它,认为它与问题无关。
实际代码是:
@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)
}
修复它。
我有以下 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.
我遵循了 String[]
的 Kotlin 等价物是什么?
或者,我可以将实际的 resource id
而不是字符串数组传递给绑定适配器吗?
谢谢!
好吧,错误不会用提供的代码重现,因为它在第二个参数中,我天真地忽略了它,认为它与问题无关。
实际代码是:
@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)
}
修复它。