ListView 视图复用机制,如何优化使滑动更加流畅

liaoinstan 2016-03-31 11:42:30
对ListView(RecyclerView同理)平时都接触比较多了。关于它的优化也比较了解
但是最近项目中,出现了一个问题,导致滑动顿卡:

listView的item比较大,高度不固定时会出现一个问题:

当前几个item高度比较高,2个item就占满了整个屏幕,listView由于内部的视图复用机制,会生成2个item的实例,继续往后滑动后面的item比较短,1个页面可以容纳10个,这时往后滑动,listView就会继续实例化8个item,导致初次滑动顿卡,但是初次滑动完成后,后面就不会再实例化了也就很流畅了。

我的问题:

这个问题本身来自listView,有没有什么方法能设置listView的初始实例化Item的数量?这样问题就能解决,但是listView似乎并没有提供这样的方法
...全文
282 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingzhong128 2016-04-01
  • 打赏
  • 举报
回复
引用 3 楼 liaoinstan 的回复:
[quote=引用 2 楼 xingzhong128的回复:]实例化一个item就很卡,那说明这个item的layout文件写的有问题,是不是里面的View层次太多或者是View的数量众多。如果View层次较深,可以对linearlayout多用Relativelayout替换,减少嵌套层次;如果是View数量太多,看看怎么减少view的数量。还有getView方法里的逻辑是不是太复杂,把里面能够精简的东西尽量简化,去掉不必要的循环逻辑,加快getView的执行速度。
有道理,但是本身的业务就决定了这个item会比较复杂[/quote] 既然是业务导致的问题,那就要靠lz自己思考怎么更好优化业务逻辑了。如果lz的item是因为数据有不同的类型展示不同的数据,不是某种类型就隐藏它对应的view,那么建议lz使用getViewTypeCount, ViewType把item拆开。如果不是的话,lz自己多思考下把。
liaoinstan 2016-04-01
  • 打赏
  • 举报
回复
引用 2 楼 xingzhong128的回复:
实例化一个item就很卡,那说明这个item的layout文件写的有问题,是不是里面的View层次太多或者是View的数量众多。如果View层次较深,可以对linearlayout多用Relativelayout替换,减少嵌套层次;如果是View数量太多,看看怎么减少view的数量。还有getView方法里的逻辑是不是太复杂,把里面能够精简的东西尽量简化,去掉不必要的循环逻辑,加快getView的执行速度。
有道理,但是本身的业务就决定了这个item会比较复杂
jklwan 2016-04-01
  • 打赏
  • 举报
回复
定义两个list,一个保存item的position,一个保存item的view,当getview时list没有position时设置数据并保存item和view,有position时直接返回保存的view即可。当刷新数据时需要手动去更新list的数据。
xingzhong128 2016-03-31
  • 打赏
  • 举报
回复
实例化一个item就很卡,那说明这个item的layout文件写的有问题,是不是里面的View层次太多或者是View的数量众多。如果View层次较深,可以对linearlayout多用Relativelayout替换,减少嵌套层次;如果是View数量太多,看看怎么减少view的数量。还有getView方法里的逻辑是不是太复杂,把里面能够精简的东西尽量简化,去掉不必要的循环逻辑,加快getView的执行速度。
绝对在乎妮 2016-03-31
  • 打赏
  • 举报
回复
recyclerview

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧