我有一个自定义绑定(bind)适配器,其属性为 onSelectItem
需要一个通用 lambda 表达式:
<UsersSpinner
<!-- more things -->
app:onSelectItem="@{(item) -> usersViewModel.select(item)}"/>
这是UsersViewModel
的select
方法的签名:
public void select(User user);
UsersSpinner
从 MyCustomSpinner<T>
延伸。这是绑定(bind)适配器:
@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>
的通用参数没有被“应用”。所以,没有办法UsersViewModel.select(Object o)
我收到编译错误。
最佳答案
好吧,最后我通过替换这个解决了这个问题
app:onSelectItem="@{(item) -> usersViewModel.select(item)}"
与
app:onSelectItem="@{(item) -> usersViewModel.select((User)item)}"
关于android - 自定义绑定(bind)适配器中的通用 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41116821/