2024年3月13日发(作者:)
ListView的使用
简介
•
•
•
•
在Android开发中ListView是比较常用的组件。
以列表的形式展示具体内容。
并且能够根据数据的长度自适应显示。
列表的显示需要三个元素:
a. 将数据映射到ListView上的适配器。
b. 填入View上的的数据。
Adapter
• 适配器。适配器是一个连接数据和AdapterView(ListView就是一个典型的
AdapterView)的桥梁,通过它能有效地实现数据与AdapterView的分离设
置,使AdapterView与数据的绑定更加简便,修改更加方便。
提供哪些Adapter
•
•
•
•
ArrayAdapter
– 绑定一个数组,支持泛型操作。
SimpleAdapter
– 绑定在xml中定义的控件对应的数据。
SimpleCursorAdapter
– 绑定游标得到的数据。
BaseAdapter
– 通用的基础适配器。
何时使用BaseAdapter
• 在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的
操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要
来处理用户的操作,而是里面的控件要获得用户的焦点。用SimpleAdapter
添加一个按钮到ListView的条目中,会发现添加可以,但是却无法获得焦
点,点击操作被ListView的Item所覆盖。这时候最方便的方法就是使用灵
活的适配器BaseAdapter了。
Adapter的执行
•
•
在我们给ListView跟Adapter建立桥梁时,也就是调用setAdapter(函数;
在setAdapter(函数中
– 首先调用sterDataSetObserver(mDataSetObserver),
目的是为了清空之前绑定的mDataSetObserver对象。
•
•
接着调用nt(函数,目的是获取行数(显示多少行的个
数)。
– 接着调用erDataSetObserver(mDataSetObserver)函数,
其原理是采用观察者设计模式来实现,目的是对绑定Adapter的数
据进行监测,一旦数据有更新,就会做相应的处理(下面在详述)。
– 接着调用wTypeCount(函数,目的是获取样式的个数
(可以这么理解,通常ListView显示每一行的View都是一样的,是
因为该函数默认返回值是1,但有时需要显示的每行的View有不一
样的,就好比定制View一样,奇数行显示用户姓名,偶数行显示用
户照片,这时我们可以设置两种View来分别显示,怎么实现呢?我
们可以在自定义的Adapter里重写getViewTypeCount(函数,让其返
回2,具体实现可以参考下面的实例代码)。
– 接着调用wTypeCount(int viewTypeCount),其参数
viewTypeCount就是上面调用wTypeCount(返回的值。
该函数的作用是通过参数viewTypeCount的值,创建多少可复用
View的List对象,就是说,如果参数viewTypeCount是2的话,那
就创建2个ArrayList
– 最后通过调用requestLayout(函数。requestLayout(会向系统发一个
重新绘制布局的信号,目的是为了调用ure方法
(该函数的实现原理不再讨论范围之内,自己可以去了解一下)。
继上面流程,接下来,调用ure(函数。
– 首先判断Adapter是否为空,目的是为了调用nt(函
数,获取其行数。
– 接着调用View(函数,该函数的作用是绘制每一
行的View。
• 首先调用nsientStateView(int position)函数,
其目的是通过参数position的值来获取刚消失的View对象。
比如,一共20条记录,手机屏幕只能显示10条记录,当往
下滑动时,第11行记录显示,可第1行的记录就消失,该函
数就是获取到第1行的View对象。 * 调用
mId(position)函数,获取该position对应的
View的id。
• 接着调用w(函数,获取一行的View。这就是
我们在手机屏幕上看到的一行的样子。
– 接着调用apView(函数,将刚显示的View放进可
复用View的List集合里。
当我们数据有更新的时候,即调用notifyDataSetChanged(函数的时候。一
旦数据发生改变,在rDataSetObserver会做相应的处
理。我们在BaseAdapter抽象类也能看到有notifyDataSetChanged(函数,
其实现就一行代码,即Changed(;而在该
–


发布评论