Android 自定义绑定适配器中的通用lambda
我有一个自定义绑定适配器,它具有一个属性Android 自定义绑定适配器中的通用lambda,android,android-databinding,Android,Android Databinding,我有一个自定义绑定适配器,它具有一个属性onSelectItem,该属性需要一个通用的lambda表达式: <UsersSpinner <!-- more things --> app:onSelectItem="@{(item) -> usersViewModel.select(item)}"/> UsersSpinner扩展自MyCustomSpinner。这是绑定适配器: @BindingAdapter("onSelectItem")
onSelectItem
,该属性需要一个通用的lambda表达式:
<UsersSpinner
<!-- more things -->
app:onSelectItem="@{(item) -> usersViewModel.select(item)}"/>
UsersSpinner
扩展自MyCustomSpinner
。这是绑定适配器:
@BindingAdapter("onSelectItem")
public static <T> void setOnSelectItem(MyCustomSpinner<T> view, final OnSelectItem<T> onSelectItem) {
view.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
T item = (T) adapterView.getSelectedItem();
onSelectItem.onSelectItem(item);
}
});
}
项
不是用户
,而是对象
,因为选择项的通用参数未被“应用”。因此,没有方法UsersViewModel.select(Object o)
,我得到了一个编译错误。好吧,最后我通过替换这个方法解决了这个问题
app:onSelectItem="@{(item) -> usersViewModel.select(item)}"
与
@{(item) -> viewModel.select(item)}
app:onSelectItem="@{(item) -> usersViewModel.select(item)}"
app:onSelectItem="@{(item) -> usersViewModel.select((User)item)}"