ListView的相关总结

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吧。。。

本文分享自微信公众号 - Android每日一讲(gh_f053f29083b9),作者:Phoenix

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于ListView的那些坑

    做过Android的同学应该都有适配安卓兼容性的问题,今天我们来说一个常见却又经常被忽略的问题。

    PhoenixZheng
  • 观察者模式--DataBinding的原理和坑

    上一次我们介绍了DataBinding的应用,不过只在应用层面描述了下,没有做深入分析。 关于DataBinding的实现原理,它的根本思想是观察者模式。 这篇...

    PhoenixZheng
  • Dagger2 Android应用:@Scope和@Subcomponent

    这部分会介绍Dagger2中比较莫名的概念,同样也不涉及Android的具体代码。 Dagger2使用中的核心技巧包括@Subcomponent和@Scope,...

    PhoenixZheng
  • dev GridControl直接打印 纵向合并单元格

    只需设置 gridView->OptionView->AllowCellMerge=true;

    乔达摩@嘿
  • 种群进化+邻域搜索的混合算法(GA+TS)求解作业车间调度问题(JSP)-算法介绍

    一道工序一旦开始加工,就不能中断。每台机器一次只能加工一道工序。在初始加工时刻,所有工件和机器都是可用的。

    短短的路走走停停
  • 原 node和c#语言对比

    魂祭心
  • 深入理解 RPC 之集群篇

    上一篇文章分析了服务的注册与发现,这一篇文章着重分析下 RPC 框架都会用到的集群的相关知识。 集群(Cluster)本身并不具备太多知识点,在分布式系统中,...

    kirito-moe
  • 极限编程核心价值:尊重(Respect)

    尊重(Respect)是极限编程(Extreme Programming,XP)的核心价值之一。

    张高兴
  • 基于java的正则表达式

    正则表达式概念 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科...

    HUC思梦
  • Node的特点

    各位宝宝,最近好吗?你那里降温了吗?北京已经降温了,各位要穿的厚厚的哦,好好照顾自己。

    用户3258338

扫码关注云+社区

领取腾讯云代金券