DataBinding错误在android微调

我正在尝试设置双向绑定与Android的微调,但我得到以下错误。

引起:android.databinding.tool.util.LoggedErrorException:发现数据绑定错误。 **** /数据绑定错误****味精:无法找到属性“绑定:selectedValue”的值类型java.lang.String android.widget.Spinner **** \数据绑定错误的getter *

这是我的SpinnerBindingUtils

public class SpinnerBindingUtils { @BindingAdapter(value = {"bind:selectedValue", "bind:selectedValueAttrChanged"}, requireAll = false) public static void bindSpinnerData(AppCompatSpinner pAppCompatSpinner, String newSelectedValue, final InverseBindingListener newTextAttrChanged) { pAppCompatSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { newTextAttrChanged.onChange(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); if (newSelectedValue != null) { int pos = ((ArrayAdapter<String>) pAppCompatSpinner.getAdapter()).getPosition(newSelectedValue); pAppCompatSpinner.setSelection(pos, true); } } @InverseBindingAdapter(attribute = "bind:selectedValue", event = "bind:selectedValueAttrChanged") public static String captureSelectedValue(AppCompatSpinner pAppCompatSpinner) { return (String) pAppCompatSpinner.getSelectedItem(); } } 

这是我的ViewModel(这是在Kotlin)

 class AddressDetailsViewModel : ViewModel() { val states: ObservableArrayList<String> = ObservableArrayList() val selectedState: ObservableField<String> = ObservableField("State") } 

布局XML:

 <Spinner android:id="@+id/state_address_details" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_weight="1" android:entries="@{viewModel.states}" bind:selectedValue="@={viewModel.selectedState}"/> 

从以下位置转换绑定适配器

 @BindingAdapter(value = {"bind:selectedValue", "bind:selectedValueAttrChanged"}, requireAll = false) 

对此:

 @BindingAdapter(value = {"selectedValue", "selectedValueAttrChanged"}, requireAll = false) 

和反向绑定适配器来自:

  @InverseBindingAdapter(attribute = "bind:selectedValue", event = "bind:selectedValueAttrChanged") 

对此:

 @InverseBindingAdapter(attribute = "selectedValue", event = "selectedValueAttrChanged") 

而在你的XML你可以做到这一点:

 <Spinner android:id="@+id/state_address_details" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_weight="1" android:entries="@{viewModel.states}" app:selectedValue="@={viewModel.selectedState}"/> 

记住要更新你的根布局标签:

 <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">