根据我的理解,当使用RecyclerView
显示数据时,以下情况会广泛发生。
1)回收者视图调用onCreateViewHolder()
方法,该方法返回一个ViewHolder对象,然后调用onBindViewHolder()
,该方法将数据与ViewHolder中包含的各个视图绑定在一起。
疑问:
由于RecyclerView
对象从不获取XML文件的总放大视图,因此仅获取包装在ViewHolder
对象内部的视图。 RecyclerView
如何能够正确绘制ViewHolder
视图? ViewHolder
中显示的各个视图是否具有关于其父级布局,填充,边距以及应放置在其父级布局中的位置的足够信息?
答案 0 :(得分:2)
RecyclerView包含一些组件。
您可以阅读这篇文章,深入了解RecyclerView。 (Link)
答案 1 :(得分:0)
我在这里错过的要点是,我们定义的自定义ViewHolder
类是基类RecyclerView.ViewHolder
类的扩展版本,其中包含对膨胀View的实际引用。此类的构造函数接收View对象引用,该引用是我们通过扩展要显示的行的XML文件而创建的。因此,代表行文件布局的整个层次结构的该View对象将另存为实例成员,该实例成员在android定义的基类(RecylclerViewer.ViewHolder
)中被命名为itemView。
class MyViewHolder extends RecyclerView.ViewHolder
{
MyViewHolder(View itemView)
{
/* We are calling the base class constructor passing the Entire View hirerachy */
super(itemView)
}
}
当我们扩展ViewHolder类时,我们在该类中添加了其他View成员(例如TextView,Buttons等),这是一种优化,因此在绑定onBindViewHolder()
中的数据时,我们可以避免在以下位置调用findViewById父View对象。
因此,我们的自定义ViewHolder
对象不仅包装了子视图对象,而且还保存/包装了对整个展开视图的引用。因此,RecyclerView
能够完全绘制行。