该文章是一个系列文章, 是本人在 Android 开发的漫漫长途上的一点感想和记录, 我会尽量按照先易后难的顺序进行编写该系列该系列引用了 Android 开发艺术探索以及深入理解 Android 卷,, 中的相关知识, 另外也借鉴了其他的优质博客, 在此向各位大神表示感谢, 膜拜!!!
前言
Hello, 大家好, 有没有想我, 这一个月没有更新文章, 为什么呢, 大声的告诉你,, 我在...(准备面试 ps: 南京)至于怎么准备的, 以及在面试中遇到的问题还有面试结果之类的, 我们下面呢会挑一些与 ListView 和 RecyclerView 相关的内容说一下, 至于其他的后文再说, 毕竟不能打乱我们之前的行文安排(嗯, 我就是这么一个十分有节操的人)
我们上一篇说了些什么呢, RecyclerView, 这个东西已经渐渐替代 ListView 成为我们 Android 开发工程师中常见的控件按照上一篇的预告呢, 我们本篇是来实战的因为毕竟本地数据的展示基本上只能作为 Demo, 在实际的工作以及项目中, 我们遇到的问题可能要比 Demo 复杂的多
面试中遇到的关于 ListView 以及 RecyclerView 的问题
第一题 ListView 的缓存复用机制
还是免不得笔试啊,, 起码我面试的几家公司有 80% 让我答一份试卷, 而且给你的时间与试卷的复杂度基本上对应不上 (无语) 不是说技术上有什么难点, 不过你想完美的答出来, 估计要写不少字, 比如其中一题 ListView 的缓存复用机制
关于 ListView 的缓存复用机制在
Android 开发之漫漫长途 XIVListView
一文中有非常详细的解说, 这边我们就不重复说了, 如果你看过我的那一篇文章, 你就明白, 这个事情不花个半小时是讲不清楚的, 更何况是写所以我们在读书或者读别人博客的时候要善于总结, 抓住核心
第二题
上来打开一个界面, 类似淘宝上的首页, 问这个页面怎么布局?
请读者先稍微思考个 5 分钟再向下看
我的思考过程是这样的
首先是根部局, 根部局我在项目中用的最多的是 LinearLayoutRelativeLayoutFrameLayout 这些布局, 不过明显这些根部局不符合滑动的条件, 必须在其内部定义 ScrollView, 或者直接顶层就用 ScrollView,
使用 ScrollView 作为顶层布局或者子布局
对于内部的列表子 View 显示可使用 RecyclerView
直接说了, 然后被打脸了, 说是 ScrollView 的话对于含有大量 Bitmap 的很多 View, 滑动的话很容易造成 OOM 有没有更好的方案
然后面试官说了一句, 可不可以考虑用 RecyclerView 作为根部局, 然后嵌套 RecyclerView 呢,, 我茅塞顿开,, 然后就没有然后了
其实我对于 RecyclerView 的理解陷入了一个误区, 毕竟在项目中只是拿它做一些列表展示完全没有想过用它作为布局的一种, 其实也是对于 RecyclerView 的 item type 等相关知识理解的不够深入如果用 RecyclerView 作为根部局虽然也有许多麻烦之处, 但是它带来的好处也是很明显的
注: 我不清楚淘宝到底是怎么做的哈,, 只是举例说明一下而已
第三题 ListView 异步获取图片显示错位
关于这一题实际上是第一题 ListView 的缓存复用机制的一个实战题目, 关于这个现象是如何产生的以及如何解决, 郭神已经在其博客中深入分析了, 我这里就不献丑了, 读者可参看 Android ListView 异步加载图片乱序问题, 原因分析及解决方案
小结
现在大多数商业内容性的 App 基本上都需要使用列表来展示, 不管是使用比较老的 ListView, 还是正被广泛使用的 RecyclerView, 这两者都在面试中碰到过现在来总结一下
ListView: 对于 ListView 来说, 考察最多的是关于 ListView 的性能优化(其原理也是 ListView 的复用机制), 使用 ViewHolder, 然后在重写的 getView 方法中复用 convertView, 对于这两点可能大部分读者都了然于胸当然还有更加直接的方式, 如我碰到的第 1 题
RecyclerView: 对于 RecyclerView 来说,
比较简单的呢, 碰到过对 ItemDecoration 以及 如何添加 HeaderView 以及 FooterView;
比较复杂的呢, 碰到过直接让你复述 RecyclerView 的缓存复用机制, 也有 RecyclerView 内几万甚至更多条数据为什么没有 OOM 这种间接的问法另外也碰到了对比于 ListView 来说, RecyclerView 的优势等等问题(关于这些问题, 我上一篇文章里也都提到, 读者可参看 Android 开发之漫漫长途 XVRecyclerView);
我的 TDK
这是我在 Github 上的一个小小的开源项目, 项目地址在文末给出, 难度也不大, 主要是用来面试的时候用来展示的 Demo 读者可以稍微看一下, 涉及一下几个内容
主界面如下所示
底部导航
使用 Fragment 进行导航切换, 这部分内容可参看我之前关于 Fragment 的文章
RecyclerView 的下拉刷新和上拉加载
这个使用的是 BRAVH 的开源库, 关于更多使用指南, 请参看官网 http://www.recyclerview.org/
RecyclerView 自定义 LayoutManager
这部分内容可参看自定义 LayoutManager 实现弧形以及滑动放大效果 RecyclerView
Material Design 协调布局(CoordinatorLayout)
本篇总结
本篇呢是个实战项目, 先是分享了面试中遇到的关于 ListView 以及 RecyclerView 的问题, 然后分享了一个小 Demo 只是抛砖引玉, 读者呢可在我的博客下评论, 分享一些面试中遇到的问题另外 Demo 中也有很多部分都虚位以待, 读者也可以提出一些功能点, 提 Issue 或者 Pull request 给我
源码地址: https://github.com/mafeibiao/TDK
来源: https://www.cnblogs.com/wangle12138/p/8675695.html