android - 自定义绑定(bind)适配器中的通用 lambda

标签 android android-databinding

我有一个自定义绑定(bind)适配器,其属性为 onSelectItem需要一个通用 lambda 表达式:

<UsersSpinner
    <!-- more things -->

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

这是UsersViewModelselect方法的签名:

public void select(User user);

UsersSpinnerMyCustomSpinner<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/

相关文章:

android - Jetpack Compose 动画的行为是什么?

Android数据绑定(bind)和三元运算符(?:) to get drawables

android - 数据绑定(bind) Android - 类型参数 T 具有不兼容的上限 : ViewDataBinding and MainActivity

Android DataBinding setVariable() 后跟 getVariable() 调用返回 null

android - 为什么 android 数据绑定(bind)库没有按预期工作?

java - Android的RelativeLayout动画问题

android - 表未在 Android 中的 SQLite 数据库中创建

android - 在 OpenCV/Android 上更改分辨率

android - 迁移到 AndroidX 后的数据绑定(bind)错误

android - RenderScript:无法打开共享库:(空)