ListView
- ListView继承AdapterView
- Adapter
- AarrayAdapter
- SimpleAdapter
- BaseAdapter
- SimpleCursorAdapter
- PageAdapter
- BaseExpandableListAdapter
- Data
- AdapterView显示的过程就是凑齐三要素的过程!
ListView的属性
- android:entries:直接填充values-string文件夹中string-array数据,使用它填充数据,使数据固定化了,不容易动态操作!
- android:divider:分割线的背景(颜色、图片)
- android:dividerHeight:分割线的高度
- android:footerDividersEnabled
- android:headerDividersEnabled
ListView配合三要素显示!并且添加头视图、足视图、空视图
- 添加头视图:addHeaderView(View view)
- 添加足视图:addFooterView(View view)
- 设置空视图:setEmptyView(View view)
- 作用:
- 当ListView数据为空的时候!会显示空视图的内容!
- 当使用了空视图,并且ListView没有数据,那么头视图和足视图也不会显示!
- 注意:尽量把以上三个操作放在setAdapter之前
- View的来源
- Java代码中创建
ImageView iv = new ImageView(Context)
iv.setLayoutParams(new LayoutParams(参数1,参数2))
- 注意:设置宽和高
- 设置LayoutParams导包时候如何导
- new LayoutParams(参数1,参数2)
- 参数1:宽
- 参数2:高
- 宽高可以直接设置值,单位为px
- 此设置属性的控件将要添加控件的类型
- ImageView—>ListView导入AbsListView包的LayoutParams
- ImageView—>LinearLayout导入ViewGroup包的LayoutParams
- Layout转成View
- LayoutInflate.from(Context).inflate(参数1,参数2)
- 参数1:要转化的布局
- 参数2:父布局的来源
ListView结合SimpleAdapter使用
- SimpleAdapter一般用于图文混排并且数据是来源于本地!
- SimpleAdapter adapter = new SimpleAdapter(参数1,参数2,参数3,参数4,参数5)
- 参数1:Context
- 参数2:数据源,
List<Map<String,Object>>
- 参数3:单挑布局文件
- 参数4:from,map的key,new String[]{}
- 参数5:to,map的key对应的value,对应单挑布局的控件的id,new int[]{}
- 问题:SimpleAdapter能加载网络图片么?
- 使用ViewBinder在外部修改单条控件显示的内容!
- 使用:
setViewBinder(new ViewBinder() {
// 第一个参数:单条布局内的控件
// 第二个参数:单条控件对应的数据
// 第三个参数:安全数据!它本身和参数2相同!但是永远不为空!
// 返回值:true,自己添加数据,SimpleAdapter不会处理控件
false,正常执行!SimpleAdapter会对控件赋值!
@Override
public boolean setViewValue(View view, Object data,
String textRepresentation) {
return boolean;
}
- 注意:
- ViewBinder能使用的范围:它只能使用在SimpleAdapter、SimpleCursorAdapter
- ViewBinder如果自行修改了显示内容!AdapterView本身的单条点击事件取值会受到影响!
ListView结合BaseAdapter
- ListView优化
- 实现完全自定义Adapter
- 优势:能实现完全自定义
- 缺点:实现起来有点复杂
- 教学目标:完全熟练!!!
- BaseAdapter的使用
- 创建一个类去继承BaseAdapter
- 添加未实现的方法
- getCount():返回显示的总条目,由数据决定,如果此处返回值是0,那么其他方法不会执行,此方法需要进行非空判断
- getItem():返回单条数据,建议把返回值类型改为List的泛型
- getItemId():返回ListView单条视图的Id
- getView():此方法是BaseAdapter最为重要的一个方法!此方法多次调用!但是每次调用的position都不相同!开发者需要在此方法中,返回装好数据的视图!必须要考虑优化问题!
- 注意事项:
- getCount()需要添加非空判断,注意写法
- getView()方法需要return ConvertView
- getView()方法中convertView不要忘记setTag();
- ListView优化写法
- ListView宽高写成定值(包括充满父布局),防止多次调用加载
- ListView自身优化!ListView默认只会加载一屏的数据!
- 利用Android回收机制,服用ConvertView!
- 定义ViewHolder类,防止重复查找控件!convertView.setTag()、convertView.getTag()
面试问题
- ListView第几次加载Item的时候,ConvertView不会为空!