我正在尝试使用 GridLayoutManager 实现 RecyclerView,但我陷入了困境。 我收到错误:
If a binding adapter provides the setter, check that the adapter is annotated correctly and that the parameter type matches.
Open File"
当我尝试编译时。 “打开文件”为我提供了 xml 回收器视图声明。
这是我的 BindingAdapter:
@BindingAdapter("listData")
fun bindRecyclerView(recyclerView: RecyclerView,
data: List<MarsPropertyData>?) {
val adapter = recyclerView.adapter as PhotoGridAdapter
adapter.submitList(data)
}
我如何称呼上面的:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/photos_grid"
android:clipToPadding="false"
app:layoutManager=
"androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2"
tools:itemCount="16"
tools:listitem="@layout/grid_view_item"
app:listData="@{viewModel.properties}"
/>
这是我的属性变量:
val properties: LiveData<List<MarsPropertyData>>
我知道 IDE 会抱怨数据类型,我的
properties
var 是 LiveData<List<MarsPropertyData>>
,里面的 BindingAdapter
只是普通的列表,但我看到了来自 google 的示例,其中逻辑是以相同的方式制作的,并且工作得很好.
是的,我添加了
'kotlin-kapt'
插件,我还有另一个可以正常工作的 BindingAdapter。
我在处理 google codelab 时遇到了类似的问题,其设置与您的非常相似。 就我而言,我无意中在先前的 bindingAdapter 函数的大括号内定义了“bindRecyclerView”bindingAdapter 函数。这导致“bindRecyclerView”函数被前一个函数所掩盖,因此无法从其他文件中看到它的设置器。当我从之前的函数中删除它时,一切正常。
我来不及回答了,但也许它会对其他人有所帮助。
问题是在编译时,未生成编译器需要调用和设置列表的绑定适配器方法。要解决这个问题,您需要再添加一个注释。这是@JvmStatic,它将在编译时生成方法,然后您的问题将得到解决。我分享了下面的例子:
@JvmStatic
@BindingAdapter("listData")
fun bindRecyclerView(recyclerView: RecyclerView,
data: List<MarsPropertyData>?) {
val adapter = recyclerView.adapter as PhotoGridAdapter
adapter.submitList(data)
}