[我有一个视图模型,其中有一个字段district
,它是MutableLiveData<String>
的类型,我已经用var district = MutableLiveData<String>("")
对其进行了初始化,我想将选定的项目绑定到它,因为我有一个BindingClass
object SpinnerBindingUtil {
@BindingAdapter(value = ["selectedValue", "selectedValueAttrChanged"], requireAll = false)
fun bindSpinnerData(
pAppCompatSpinner: Spinner,
newSelectedValue: String,
newTextAttrChanged: InverseBindingListener
) {
pAppCompatSpinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?,
view: View,
position: Int,
id: Long
) {
newTextAttrChanged.onChange()
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
if (newSelectedValue != null) {
val pos =
(pAppCompatSpinner.adapter as ArrayAdapter<String?>).getPosition(
newSelectedValue
)
pAppCompatSpinner.setSelection(pos, true)
}
}
@InverseBindingAdapter(attribute = "selectedValue", event = "selectedValueAttrChanged")
fun captureSelectedValue(pAppCompatSpinner: AppCompatSpinner): String {
return pAppCompatSpinner.selectedItem as String
}
}
这是我的xml
<Spinner
selectedValue="@=
{addConsumerViewModel.district}"
android:entries="@array/districts"
android:id="@+id/districtSpinner"
style="@style/AddConsumerSpinner"/>
但是我遇到错误,我该如何解决此问题
由于selectedValue
的类型为String
。因此,您必须传递String
数据而不是LiveData
。如下更新: