如何使用 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}"
。
我正在尝试找出如何绑定列表项,以及 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}"
。