首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ListView的相关总结

ListView的相关总结

作者头像
PhoenixZheng
发布2018-08-07 16:19:16
3780
发布2018-08-07 16:19:16
举报

Android的ListView可以算是最古老的UI控件了,

但是它有很多设计上的思想可以借鉴学习。

LitView的使用

回顾一下, ListView的使用其实非常简单, 只需要提供一个 UI,提供一个装载数据的 Adapter, 在 Adapter的 getView 方法里实现每个 item需要渲染的UI, 再把 item 返回给 ListView就可以。

我们先回想一个问题, 假设一个列表有 1000 个数据, 那么是否是说 ListView 就有 1000 条 UI呢?

结果当然是否定的, 这样对于内存和CPU是极大的浪费。 其实每个在可见 UI之外的 item并不一定会被销毁, 而是会被重用, 如果你尝试在 getView 方法中这么写的话,

....
    if(converView != null) {
        return convertView;
    }

    convertView = ....//这里生成一个新的 Item
    return convertView;

就会发现在滑动列表的时候会出现已经离开屏幕的那些 item。

ListView的优化

通常在 Android初级的面试中会涉及到这个问题, 就是如何优化 ListView, 一般由浅到深的思路是这样的, · 复用 convertView · 自定义 ViewHolder,用 converView的 setTag把 ViewHolder对象设进去 然后再复用的时候用 getTag获得 ViewHolder并改变它的数据 减少渲染UI的时间 · 对于包含 Bitmap的 ListView,用 Cache将 Bitmap对象缓存起来, · 更进一步,可以设计三级缓存来管理占用大内存对象,比如 Bitmap · 用异步的形式延迟 Bitmap渲染,产生顺滑的滑动效果 · 用 RecyclerView 替代 ListView

ListView的局限

其实 ListView的局限很明显, 最简单的是它不能提前渲染 item, 这就造成当我们尝试用异步的方式来延迟渲染的时候有可能会让 UI跳动。

原因很简单, 每个 item可能高度不一样, 在延迟渲染完成后高度发生了变化,这就导致整个UI发生跳动, 这样的问题在一些复杂的场景下很难解决, 所以最简单直接的办法是。。。 用 RecyclerView吧。。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LitView的使用
  • ListView的优化
  • ListView的局限
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档