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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android干货园

教你轻松几步实现底部导航栏

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/45...

12210
来自专栏james大数据架构

Android 2.x中使用actionbar - Actionbarsherlock

1. 范例说明 从Android 3.0开始,Android引入了ActoinBar,不得不说3.0之前android的标题栏确实比较丑,并且还没有任何功能。...

21950
来自专栏Vamei实验室

安卓第五夜 维纳斯的诞生

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

20630
来自专栏KK的小酒馆

Adapter与ListView的简单应用(上)Android应用界面开发

所谓适配器,是一个在“用户界面”View和“数据模型”Model之间的"控制器"Controller

17320
来自专栏向治洪

自定义actionbar

Android 3.0及以上已经有了ActionBar的API,可以通过引入support package在3.0以下的平台引用这些API,但这儿呢,完全自定义...

22590
来自专栏androidBlog

ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

2.3K30
来自专栏Android干货园

Android谈谈封装那些事--BaseActivity和BaseFragment(一)

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/53...

76730
来自专栏技术小黑屋

自定义支持读取XML属性的View

在Android中,添加一个View很简单,简单的你可以简简单单地使用xml和一部分简单的java代码就可以搞定。 比如这样

12920
来自专栏Android机器圈

Android数据绑定技术二,企业级开发

PS:上一篇文章写了Databinding的简单使用,写了一个绑定textview的示例,和绑定的一些用法,估计有的人会说,之前的写的好好的,为什么要数据绑定这...

37190
来自专栏小巫技术博客

A009-layout资源

本节课继续讲Android中的资源文件-layout资源,一个界面的诞生离不开布局,我们Android开发者的大部分工作都是在搭建UI,一个产品的诞生,首先是由...

11930

扫码关注云+社区

领取腾讯云代金券