RecyclerView用法老忘,写一个blog,以后再用的时候有不清楚的时候就不用翻好多资料了!芜湖。
代码部分
layout
两个layout,一个存有Recyclerview,另一个是需要加载在每个position的item。
这个存放RecyclerView。
1 |
|
发现已经不用导入v7包了,也不用添加依赖,真不戳!
然后是每个item:
1 |
|
Activity
两个activity,一个显示RV,另一个适配器。
1 | public class MainActivity extends AppCompatActivity { |
Adapter:
1 | public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerviewAdapter.RecyclerViewHolder> { |
浅析
RV的视图复用管理更好,能使用列表网格和瀑布流,API中封装了好多实用功能,但是使用稍微麻烦,没有onItemClickListener等监听事件,要自己写。
RecyclerView的缓存
rv缓存分为四级,scrap,catche,ViewCacheExtension,RecycledViewPool。缓存中的ViewHolder都不需要重新创建视图。
Scrap
scrap下的缓存又分为两类,一类mAttachedScrap缓存正在显示的ViewHolder,一类mChangedScrap缓存发生变化的ViewHolder,mChangedScrap中的ViewHolder会被移动到RecycledViewPool中。
cache
cache,即mCachedViews,缓存从屏幕中移除但是可能会被再次显示的ViewHolder,有大小限制。例如手指向上滑动(向下翻页)时,刚被划出屏幕外的,很有可能存放在mCachedViews中(在大小限制以内)。
ViewCacheExtension
ViewCacheExtension用户自定义的缓存,可以实现一些特殊功能,比如说ViewHolder中某个固定位置,内容是固定的(一些app最上面的广告,position为0时),自定义好缓存后,滑出该位置再回来就不会重新new和bind,而是直接在ViewCacheExtension找。
RecycledViewPool
RecycledViewPool存储各种ViewHolder,需要被重新绑定数据,可能像scrap下mChangedScrap数据有改变所以需要重新绑定,也可能是超出mCachedViews和ViewCacheExtension的数据。
参考文章
- Post link: https://andro-medam.github.io/2021/10/19/RecyclerView/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.