回收站视图如何绘制单个行

时间:2018-10-24 22:35:55

标签: android android-recyclerview

根据我的理解,当使用RecyclerView显示数据时,以下情况会广泛发生。

1)回收者视图调用onCreateViewHolder()方法,该方法返回一个ViewHolder对象,然后调用onBindViewHolder(),该方法将数据与ViewHolder中包含的各个视图绑定在一起。

疑问: 由于RecyclerView对象从不获取XML文件的总放大视图,因此仅获取包装在ViewHolder对象内部的视图。 RecyclerView如何能够正确绘制ViewHolder视图? ViewHolder中显示的各个视图是否具有关于其父级布局,填充,边距以及应放置在其父级布局中的位置的足够信息?

2 个答案:

答案 0 :(得分:2)

RecyclerView包含一些组件。

  1. 适配器(提供数据)
  2. 视图持有者(提供用于绑定数据的视图)
  3. LayoutManager(每个项目的位置)
  4. 和其他人。

您可以阅读这篇文章,深入了解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能够完全绘制行。