自定义绑定适配器中的通用lambda

时间:2016-12-13 08:45:29

标签: android android-databinding

我有一个属性为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>,我得到编译错误。

1 个答案:

答案 0 :(得分:2)

好吧,最后我通过替换

解决了这个问题
app:onSelectItem="@{(item) -> usersViewModel.select(item)}"

app:onSelectItem="@{(item) -> usersViewModel.select((User)item)}"