recyclerview
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了recyclerview相关的知识,希望对你有一定的参考价值。
参考技术A 1、避免创建过多的对象(如点击事件)2、数据处理与视图绑定分离(onBindViewHolder 应该只是将数据set到视图中,而不应进行业务的处理)
3、数据优化(分页、DiffUtil<数据对比>局部刷新)
4、局部更新(知道哪些position的局部刷新)
notifyItemChanged(int position)
notifyItemInserted(int position)
notifyItemRemoved(int position)
notifyItemMoved(int fromPosition, int toPosition)
notifyItemRangeChanged(int positionStart, int itemCount)
notifyItemRangeInserted(int positionStart, int itemCount)
notifyItemRangeRemoved(int positionStart, int itemCount)
如果必须用 notifyDataSetChanged(),那么最好设置 mAdapter.setHasStableIds(true)
https://zhuanlan.zhihu.com/p/49338922
RecyclerView性能优化 (优先看这个)
https://blog.csdn.net/smileiam/article/details/88396546
RecyclerView性能优化及高级使用
缓存机制
https://juejin.im/post/5a5d3d9b518825734216e1e8
https://juejin.im/post/5b79a0b851882542b13d204b
onbindview 不做计算等耗时任务
增加删除用局部更新 DiffUtil
闪烁处理
数据优化(分页 对拉取的远端数据进行缓存,提高二次加载速度)
RecyclerView缓存机制
加大RecyclerView的缓存
设置高度固定
RecyclerView数据预取
https://www.jianshu.com/p/c5ca75d3a78c
https://www.cnblogs.com/baiqiantao/p/6956425.html
处理刷新闪烁
调用notifyDataSetChange时,适配器不知道整个数据集中的那些内容以及存在,再重新匹配ViewHolder时会花生闪烁。
设置adapter.setHasStableIds(true),并重写getItemId()来给每个Item一个唯一的ID
https://juejin.im/post/5995ba616fb9a024747ed8e8
https://www.cnblogs.com/dasusu/p/9159904.html
这个赞一下!
https://zhuanlan.zhihu.com/p/24807254
怎么导入recyclerview包
导入RecyclerView,CardView由于RecyclerView,CardView是放在support library v7包中,所以我们想要使用就必须要导包。
下面就介绍下在Eclipse和Android Studio中是如何导入这两个包的。
Eclipse:
第一步:通过SDK manager下载/更新Android Support Libraries(5.0版本最新为21)
第二步:导入CardView和RecyclerView项目(都在support v7中)
1.在Eclipse中点击Import,导入Android项目
2.导入CardView和RecycleView,路径为your sdk path\extras\android\support\v7\cardview(RecycleView则为相同目录下的recyclerview)
3.导入时记得将工程copy到本地并建议重命名,这样方便以后管理例如:
第三步:设置Library
1..将两个工程设置为Library
2..在主工程中引入这两个Library例如:
通过这三步就可以将这两个包导入进来了。
Android Studio
Android Stuido相对于Eclipse简单的多:
第一步:
首先要确保已经将Android Support Libraries升级到最新. 参考技术A 1、打开SDK Manager,在Extras树下找到Android Support Library,下载好支持包。RecyclerView在v7-21版本就出来了。我这里不用更新了,说明是最新的,怎么可能不行呢?
2、检查app的build.gradle。里面的的v7版本也都是23.2.1
3、打开External Libraries,直接找到类,也没有
4、查看appcompat-v7-23.2.1的属性,里面有源代码引用的位置,在SDK目录下:\extras\android
\m2repository\com\android\support\appcompat-v7\23.2.1\appcompat-v7-23.2.1-sources.jar
5、打开上面目录后,发现里面有appcompat-v7,而且里面最新版本就是23.2.1
6、按照第2步的思路,试试直接编译进来是否OK。按照目录结构,在app的build.gradle的dependencies最后添加了一句:
compile ‘com.android.support:recyclerview-v7:23.2.1’
7、Build——Clean Project。等待Clean完毕后,在External Libraries中看到了期待中的recyclerview
8、能导入包了、
在\extras\android\support\v7\recyclerview\libs 目录下发现有android-support-v7-recyclerview.jar。要是上面的方法不行,这就是第二种解决办法了,直接导入到libs中了本回答被提问者采纳
以上是关于recyclerview的主要内容,如果未能解决你的问题,请参考以下文章