Android之ListView,RecyclerView

ListView

1.继承重写BaseAdapter类
2.自定义ViewHolder与ConvertView的优化

布局

单一布局,只可以实现纵向效果

缓存机制

两级缓存
mActiveViews:快速重用屏幕上可见的列表项,不需要重新createView和bindView;
mScrapViews:缓存离开屏幕的ItemView,目的是让即将进入屏幕的ItemView重用.
在这里插入图片描述

刷新

通常情况下的刷新都是全局刷新(消耗资源) notifyDataSetChanged()
局部刷新步骤:①实现onItemChanged()方法
       ②通过onItemChanged()方法获取对应的position
       ③通过getView()实现局部的刷新

点击事件

ListView实际是自带点击事件的,可以直接调用API:onItemClickListener();onItemLongListener();onSelecterListener()
方法二:
①通过getItemId()返回的id对用Item(此处不可以通过position,因为一旦有头部和底部会出现越界的问题,在此处不建议使用)
②在Adapter中针对,每一个item写在getView()方法中

空数据

具有处理空数据的方法setEmptyView()

卡顿现象

原因分析

1.布局里面照片过大
2.布局过于复杂,嵌套层级深
3.Adapter多余或者不合理的notifySetDataChanged;
4.在getView方法中进行了复杂计算或者耗时操作
5.Adapter的getView方法里面convertView没有使用setTag和getTag方式;
每次getView都要执行 findViewById, 这是相当耗时的

解决方案

1.对图片进行压缩,图片的加载和获取采用三级缓存的形式(内存+磁盘+网络中下载)
2.在adapter的getView方法中对convertView setTag(viewHolder),这个是大部分开发者都会去用的方案,它的原理是避免重复通过inflate方法去渲染UI,只要set了tag,view就可以被重用。
3.列表在滑动时不加载,停止时才加载。

RecyclerView

布局

不光可以实现纵向布局,还可以实现横向,表格,瀑布流等布局。

缓存机制

四级缓存机制:支持多个离ItemView缓存,支持开发者自定义缓存处理逻辑,支持所有RecyclerView共用同一个RecyclerViewPool(缓存池)。
mAttachedScrap:快速重用屏幕上可见的列表项,不需要重新createView和bindView;与ListView的mActiveViews作用一致。
CachedViews + mReyclerViewPool:缓存离开屏幕的ItemView,目的是让即将进入屏幕的ItemView重用与mScrapViews功能一致。
mRecyclerPool可以供多个RecyclerView共同使用,在特定场景下,如viewpaper+多个列表页下有优势
mViewCacheExtension:需要用户定制,默认情况下不实现,自定义获取holder缓存
缓存:
View + ViewHolder(避免每次createView时调用findViewById) + flag(标识状态);
在这里插入图片描述
四级缓存
一、符合条件的所有ViewHolder
二、发生变化的ViewHolder
三、remove掉的ViewHolder(依旧保留其信息,只是不和视图绑定)
四、恢复出厂设置的时候最原始的视图

刷新

局部刷新notifyItemChanged

点击事件

只有唯一的API:addOnItemTouchListener();

空数据

不含有处理空数据的方法,需要自己进行数据空的判断

总结

通过上边对LiatView和RecyclerView对比,我们可以发现Recycler和List相比较而言,由于两者的缓存机制的不同,所以只有在列表页展示界面,需要支持动画,或者频繁更新,局部刷新的情况下,RecyclerView的有时会很明显,显得强大完善,易扩展;在其余的情况下,ListView还是可以满足用户需求的,而且更加的方便使用而且快捷。ListView有的时候会出现滑动卡顿的状况,但是Recycler由于设置了四级缓存,就不会出现滑动卡顿的状况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值