巩固BaseAdapter(2017年12月12日)
2017.12.12
1、巩固BaseAdapter
【案例】使用listview显示联系人列表。
对于数据操作,不再让每一个集合元素使用HashMap,而是直接使用实体类。
activity_main.xml
item.xml
styles.xml
Person.java
MyBaseAdapter.java
MainActivity.java
效果:
2、ListView中BaseAdapter显示的性能问题
当加载很多item时,ListView会明显变慢。如何提高ListView的性能?
每个item实际上都是单独的控件。而这些控件都是根据显示情况,临时生成的。
由于每次都要从view中创建控件,这个过程非常耗用资源。能否将这些item中的控件缓存起来。
如何缓存这些item中的控件?
定义一个实体类,根据控件个数来定义这个实体类。(ViewHolder)
【案例】扩大上例数据显示数。观察性能问题。
MainActivity.java---修改
MyBaseAdapter.java
日志:
无论怎么滚动Listview,只会看到7条日志。而之前是有多少数据,就显示多少条日志。性能大大提升。
3、为Listview添加事件
对于用户点击item时,有响应。该事件是——onItemClick(针对Listview来说,属于listview的事件,不是属于单个item)
【案例】点击item响应
在MainActivity.java中追加
效果:
4、GridView(网格视图)
ListView(列表视图)是纵向显示数据
GridView是横向显示数据,如果一行显示不下,就会换行。
都需要使用数据适配器,仅仅是外观不一样。
GridView有哪些属性:
ColumnWidth:表示一列的宽度
numColumn:表示一行显示几列
horizontalSpacing:水平方向间距
verticalSpacing:垂直方向间距
gravity:内部元素对齐方式
stretchMode:拉伸方式(不拉伸NO_STRETCH,拉伸间距STRETCH_SPACING,元素和间距一起拉伸STRETCH_SPACING_UNIFORM,元素本身STRETCH_COLUMN_WIDTH)
【案例】显示的每个单元格,上图下字。
项目结构:
activity_main.xml
item.xml
MyBaseAdapter.java
MainActivity.java
效果:
【作业】
1、P177页,图6-7
2、修改之前作业“选择地址”,地址列表使用ListView,当用户选择后,显示选中的地址。
选做:
第2题中,地址信息编辑功能选做。