如何使用 ViewModel 绑定到 Android Spinner

How to bind to an Android Spinner using a ViewModel

我正在尝试找出如何绑定列表项,以及 Android Spinner 的选定 value/index(我对 Android / Kotlin 很陌生)

我有以下 ....

<Spinner
    android:layout_row="17"
    android:layout_column="2"
    android:id="@+id/spinner1"
    android:layout_width="1200px"
    android:entries="@{viewModel.devicesDescriptions}"
    app:selectedValue="@={viewModel.devicePosition}"
    android:layout_height="wrap_content"
    android:background="@android:drawable/btn_dropdown"
    android:spinnerMode="dropdown"/>

并在视图模型中

val devicesDescriptions = ObservableArrayList<String>()
var devices = listOf<MidiDeviceInfo>()
fun setFoundDevices(d: MutableList<MidiDeviceInfo>) {
    devices = d
    for (dev in devices)
        devicesDescriptions.add(dev.toString())
}

通过反复试验,我可以只为 Spinner 项目设置字符串(MidiDeviceInfo 会更好,但字符串也可以)

但是,我无法获得使 selectedItem 起作用的绑定。

我已经尝试了很多东西,但是上面的东西,我有错误

    Found data binding error(s):
    [databinding] {"msg":"Cannot find a getter for \u003candroid.widget.Spinner app:selectedValue\u003e that accepts parameter type \u0027java.lang.String\u0027\n\nIf a binding adapter provides the getter, check that the adapter is annotated correctly and that the parameter type matches.","file":"app\src\main\res\layout\activity_main.xml","pos":[{"line0":334,"col0":4,"line1":343,"col1":39}]}

有人知道这样做的方法吗?

尝试使用 android:selectedItemPosition="@={viewModel.devicePosition}" 而不是 app:selectedValue="@={viewModel.devicePosition}"