![](/img/trans.png)
[英]Android data binding : Cannot find setter for attribute app:list
[英]Cannot find the setter for attribute in Data binding
我在我的應用程序中使用了 LiveData、DataBinding 和 Kotlin。
我為 RecyclerView 定義了一個綁定適配器,如下所示:
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)
}
}
}
}
和我的 XML 中的 reyclerView 分配給這個 bindingAdapter ,如下所示:
<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"/>
在我的 ViewModel 中,我使用了
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'
And apply 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 ") 花了我 2 小時才找到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.