在数据绑定中找不到属性的资源库



我在应用程序中使用了 LiveData、DataBinding 和 Kotlin。

我为回收器视图定义了一个绑定适配器,如下所示:

class MainListBindings {
private val TAG = "TasksListBindings"
companion object {
@JvmStatic
@SuppressWarnings("unchecked")
@BindingAdapter("main_items")
fun setItems(recyclerView: RecyclerView, items: MutableLiveData<List<Homeitem>>? = null) {
val adapter: RecyclerMainAdapter = recyclerView.adapter as RecyclerMainAdapter
//prevent use of null list
items?.let {
adapter.swapData(items)
}
}
}
}

和我的 reyclerView 在 XML 中分配给这个绑定适配器,如下所示:

<android.support.v7.widget.RecyclerView
android:id="@+id/main_recycler"
app:main_items="@{viewmodel.items}"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

在我的视图模型中,我使用

val items = MutableLiveData<List<Homeitem>>()

以创建列表。

但是我在构建应用程序时遇到此错误:

Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'app:main_items' with parameter type android.arch.lifecycle.MutableLiveData<java.util.List<project.data.pojo.Homeitem>> on android.support.v7.widget.RecyclerView. file:/home/user/Yara/bazinama_mag/bazinama/app/src/main/res/layout/fragment_main.xml loc:22:24 - 22:38 **** data binding error ****

此错误可能有不同的原因,但就我而言,问题之所以出现,是因为我没有在Gradle中添加apply plugin: 'kotlin-kapt'Andapply plugin: 'kotlin-android-extensions'

添加这些插件后,您必须将annotationProcessors替换为kapt.

在那之后,每件事都可能进展顺利。

绑定适配器

@JvmStatic
@BindingAdapter("main_items")
fun setItems(recyclerView: RecyclerView, items: MutableLiveData<List<String>>) {
}

class User : ViewModel(){
lateinit var list: MutableLiveData<List<String>>
}

绑定数据

val items = ViewModelProviders.of(this@FragmentName)
.get(RecyclerViewHelper.User::class.java)
mBinding!!.user = items

布局

<layout>
<data>
<variable
name="user"
type="com.XXX.view.recylerview.RecyclerViewHelper.User" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/helper_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
app:main_items="@{user.list}" />
</RelativeLayout>
</layout>

检查@BindingAdapter值后是否有空格,如下所示:

@BindingAdapter("sleepDurationFormatted ")
^
|
here

花了我2个小时才找到答案。

最新更新