代码之家  ›  专栏  ›  技术社区  ›  Ehsan

在数据绑定中找不到属性的setter

  •  6
  • Ehsan  · 技术社区  · 6 年前

    我在应用程序中使用LiveData、数据绑定和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"/>
    

    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 ****
    
    2 回复  |  直到 6 年前
        1
  •  42
  •   Ehsan    6 年前

    这个错误可能有不同的原因,但在我的例子中,问题是因为我没有添加 apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' 在我的 Gradle .

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

    在那之后,一切都会好起来的。

        2
  •  4
  •   Mahavir Jain    6 年前

    绑定适配器

        @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>