绑定适配器 - 在回收器视图中找不到 LiveData 变量的设置器

问题描述 投票:0回答:2

我正在尝试使用 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。

android android-recyclerview android-binding-adapter
2个回答
1
投票

我在处理 google codelab 时遇到了类似的问题,其设置与您的非常相似。 就我而言,我无意中在先前的 bindingAdapter 函数的大括号内定义了“bindRecyclerView”bindingAdapter 函数。这导致“bindRecyclerView”函数被前一个函数所掩盖,因此无法从其他文件中看到它的设置器。当我从之前的函数中删除它时,一切正常。


0
投票

我来不及回答了,但也许它会对其他人有所帮助。

问题是在编译时,未生成编译器需要调用和设置列表的绑定适配器方法。要解决这个问题,您需要再添加一个注释。这是@JvmStatic,它将在编译时生成方法,然后您的问题将得到解决。我分享了下面的例子:

@JvmStatic
@BindingAdapter("listData")
fun bindRecyclerView(recyclerView: RecyclerView,
                     data: List<MarsPropertyData>?) {
    val adapter = recyclerView.adapter as PhotoGridAdapter
    adapter.submitList(data)
}
© www.soinside.com 2019 - 2024. All rights reserved.