微调器所选项目的双向数据绑定

问题描述 投票:0回答:1

[我有一个视图模型,其中有一个字段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"/>

但是我遇到错误,我该如何解决此问题

android android-studio android-spinner android-databinding
1个回答
0
投票

由于selectedValue的类型为String。因此,您必须传递String数据而不是LiveData。如下更新:

© www.soinside.com 2019 - 2024. All rights reserved.