《Android 自己动手写ListView学习其原理 2 上下滚动》
《Android 自己动手写ListView学习其原理 3 ItemClick,ItemLongClick,View复用》
之前分析ListView初始化写的一篇文章 《Android ListView初始化简单分析》,现在按照Android ListView的原理自己动手写一个ListView,因为分析源码总有可能一些地方看到了也不一定注意,即使注意自己理解的还原本的含义也不一定一样,自己动手印象也更深刻,ListView是Android中使用频率非常高的控件,其内部实现也很负责,涉及视添加,滚动,抛掷滑动Fling,点击(ItemClick),按压Item(Pressed)等处理,当前文章是一个初步实现,仅能把第一屏的Item给显示出来,其他特性都不支持。
一、有图有真相 自己写一个ListView即使再像,它还是ListView的样子。。。
二、简单分析实现步骤
先想想平时是怎么使用ListView控件的,Data + Adapter(getView), ListView 涉及适配器模式,即 数据和视图由开发者创建 Adapter把不同的数据和视图匹配到ListView进行展示,既然当前是自己写ListView前两个Data 与 Adapter还是使用复用实现实现就行,没必要重新涉及这两块。
主要实现ListView另外两个实现方式和之前相同就行,先来看看ListView继承结构:
ListView --extends--> AbsListview --extends--> AdapterView --extends--> ViewGroup --extends--> View
看了ListView的继承结构,要是自己写要继承自己哪一个呢?应该如何选择?
1. 从最顶层父类开始看吧,自定义视图都必须继承自View这是无容置疑的,自己写肯定要继承自己View。
2. 接着看是否要继承自其子类ViewGroup?实现ListView必须要继承自ViewGroup因为其自身必须可以包含子视图,是否要继承自AdapterView?
3. 是否要继承自ViewGroup子类AdapterView ? 这个是可以选择的,可以继承也可以不继承没有强制性,不过AdapterView主要是把数据和和视图绑定到ListView 和 一些记录操作等处理,其实也没必要维护直接继承。
结论:ListView常用使用中需要Data + Adapter(getView), ListView 三部分,其中前两项和之前使用ListView一样,主需要处理自定义ListView即可,而且自定义的ListView可以直接自称自AdapterView。
三、上代码
1. 先来看看在Activity写的Data + Adapter ,与常用ListView使用相同没什么特别的。
public class MainActivity extends Activity {
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@