Android BindingAdapter error.NonExistentClass

时间:2017-07-10 11:00:29

标签: android android-databinding android-binding-adapter

这是我的BindingAdapter

@InverseBindingMethods({
        @InverseBindingMethod(type = RecyclerView.class, attribute = "lastAdapter", method = "getLastAdapter"),
})
public class RecyclerViewBindingAdapter {
    @BindingAdapter(value = {"lastAdapter"}, requireAll = false)
    public static void setLastAdapter(RecyclerView view, LastAdapter adapter) {
        view.setAdapter(adapter);
    }

    @InverseBindingAdapter(attribute = "lastAdapter")
    public static LastAdapter getLastAdapter(RecyclerView view) {
        return (LastAdapter) view.getAdapter();
    }
}

我在gradle上添加了RecyclerView依赖:

compile "com.android.support:recyclerview-v7:25.3.1"

这就是我在布局中使用的方式:

<android.support.v7.widget.RecyclerView
 app:lastAdapter = "@{viewModel.adapter}"
 ... />

我在扩充此布局后已经设置了viewModel绑定变量。但每当我运行我的代码时,gradle始终显示以下错误

Error:(48, 34) Cannot find the setter for attribute 'app:lastAdapter' with parameter type error.NonExistentClass on android.support.v7.widget.RecyclerView. 

我可以通过从布局中删除任何app:lastAdapter然后清理并重建来解决此问题,再次重写那些app:lastAdapter attibutes然后重建项目,一切正常。

这不是一个方便的解决方案。

2 个答案:

答案 0 :(得分:0)

正如乔治在上面的评论中所说的那样“BindingAdapter采用LastAdapter,但适配器似乎是另一种类型” 这是变量签名的方式:

var adapter = LastAdapter(data, BR.item).map<MenuLinked, MenuItemBinding>(R.layout.menu_item)

似乎DataBinding库无法确定来自Kotlin的隐式数据类型声明,因此需要明确定义:

var adapter : LastAdapter = LastAdapter(data, BR.item).map<MenuLinked, MenuItemBinding>(R.layout.menu_item)

答案 1 :(得分:0)

在android studio终端内运行此命令并再次构建项目

./ gradlew clean assemble