我正在尝试构建一个封装的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的绑定数据初始设置适配器?
感谢。