Android——RecyclerView——ViewHolder——源码注释翻译:ViewHolder的官方

/**
 * A ViewHolder describes an item view and metadata about its place within the RecyclerView.
 *
 * <p>{@link Adapter} implementations should subclass ViewHolder and add fields for caching
 * potentially expensive {@link View#findViewById(int)} results.</p>
 *
 * <p>While {@link LayoutParams} belong to the {@link LayoutManager},
 * {@link ViewHolder ViewHolders} belong to the adapter. Adapters should feel free to use
 * their own custom ViewHolder implementations to store data that makes binding view contents
 * easier. Implementations should assume that individual item views will hold strong references
 * to <code>ViewHolder</code> objects and that <code>RecyclerView</code> instances may hold
 * strong references to extra off-screen item views for caching purposes</p>
 */


一个ViewHolder描述一个item视图和关于它在RecyclerView中的位置的元数据。

[什么是元数据?]



Adapter的实现需要把ViewHolder作为静态嵌套类,以及需要在ViewHolder类中增加成员变量,用来维护(缓存)item中的通过fvb取得的子视图。

[就像这样的形式]

static class ViewHolder extends RecyclerView.ViewHolder {
    ImageView imageView;
    TextView textView;

    public ViewHolder(View view) {
        super(view);
        imageView = (ImageView) view.findViewById(R.id.imageView);
        textView = (TextView) view.findViewById(R.id.textView);
    }
}

当LayouParams是属于LayoutManager的时候,ViewHolder属于这个Adapter。

[意思就是:ViewHolder父类中内部维护了LayoutParams的变量,如果给RecyclerView设置了LayoutManger(可以理解为LayoutManager就是LayoutParams的一种),这个时候V iewHolder才会和Adapter产生联系。]


Adapter应该可以随意使用他们自己定制的ViewHolder子类来使得 存储绑定视图内容的数据 更轻松。


ViewHolder的子类中的实现你只需要当成对一个item操作即可,你不用忧虑所有的item,ViewHolder父类会自动帮你把另外的item按照你想要的形式去设计。单个item将保持 被ViewHolder对象的强引用

[意思就是ViewHolder的实例会维护单个item],

并且RecyclerView的实例会把屏幕外面的item维护起来,保持一个强引用,其目的是缓存这些视图,为了下次回到屏幕的时候可以不用再次加载。



最后总结一下:ViewHolder是一个帮你免去重复工作的工具,你给他一个模板,给每个模板不同的值,告诉他哪里该绑定什么数据,他会自动帮你做好重复的工作。(当然了, 这是和recyclerView联合工作才能实现的功能)


最通俗的一句话:viewHolder就是view的持有者,实际上就是一个item啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值