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的主要内容,如果未能解决你的问题,请参考以下文章

还在用ListView?

recyclerview禁止水平滑动

RecyclerView的使用

RecyclerView 判断滑到底/顶部的方法

RecyclerView--个人使用心得

滚动完成前Recyclerview滚动不顺畅