何时为自定义recyclerview设置adapter

时间:2017-08-18 23:43:52

标签: android android-recyclerview android-custom-view android-databinding

我正在尝试构建一个封装的RecyclerView。我使用数据绑定来获取将要显示的数据(即需要转到适配器的数据)。

我正在努力在我的Recycler中找到合适的地方来设置我的适配器。如果我把它放在构造函数或onFinishedInflate()中,数据绑定尚未设置。如果我将它放在onLayout()中它可以工作,但是在用户第一次与RecyclerView交互之后,RecyclerView才会显示这些项目(不知道为什么)。

class MyRecyclerView : RecyclerView {
    private var binding: MyBinding? = null

    override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int)
    {
    if (binding == null) {
        binding = DataBindingUtil.getBinding(this)
        val adapter = MyAdapter(binding!!.mydata.DataList)
        setAdapter(adapter)
        adapter.notifyDataSetChanged()
        setLayoutManager(LinearLayoutManager(getContext()))
    }
}

xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="myData"
            type="com.example.xxx.XXX" />
    </data>

    <com.example.xxx.MyRecyclerView
        android:id="@+id/xxx"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@android:color/darker_gray"
        android:orientation="horizontal">
    </com.example.xxx.MyRecyclerView>
</layout>

我承认onLayout似乎是一个奇怪的地方。

我确实将CustomView转换为Fragment,但显然将数据绑定到Fragment是非法的(至少在xml中)。

那么......是否有一个好的/更好的时间从自定义RecyclerView的绑定数据初始设置适配器?

感谢。

0 个答案:

没有答案