我有一个属性为onSelectItem
的自定义绑定适配器,需要泛型 lambda表达式:
<UsersSpinner
<!-- more things -->
app:onSelectItem="@{(item) -> usersViewModel.select(item)}"/>
这是UsersViewModel
的{{1}}方法的签名:
select
public void select(User user);
从UsersSpinner
延伸。这是绑定适配器:
MyCustomSpinner<T>
问题是 @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(User u)
@{(item) -> viewModel.select(item)}
不是item
,而是User
,因为Object
的通用参数未被“应用”。所以,没有方法OnSelectItem<T>
,我得到编译错误。
答案 0 :(得分:2)
好吧,最后我通过替换
解决了这个问题app:onSelectItem="@{(item) -> usersViewModel.select(item)}"
与
app:onSelectItem="@{(item) -> usersViewModel.select((User)item)}"