Java代码的实现部分:
1.继承BaseAdapter,实现BaseAdapter未实现的方法,包括:
getCount(), getItem(), getItemId(), getView()
getCount() 总条目的个数即就是数据源的长度,例如 list.sise()
getItem() 每个item上的数据源 例如数据源是实体类 那么每个Item上的数据源就是一
个entity类对象,如果数据源是List<Map<String,Object>>那么每个item就是
一个map数据
getItemId() 每一个item项的ID return一个position即可
getView() 最重要的一个方法 将布局文件上的控件显示出来 注意:return为空的话将
不会显示视图
2.创建含参的构造方法,参数包括(Context,数据源(例如 List 集合))
构造方法传递Contex 主要是将布局转换成View视图要用到
获取view视图用两种方法:
1. 用View.inflate() 静态方法
2. 先获取LayoutInflate 对象然后 对象.inflate() 方法 获取 view 视图
3. 书写getView方法,包括实例化控件,控件赋值
代码优化:
1.复用ConvertView (作用:减少每次都用获取View视图)
2.创建ViewHolder类,ViewHolder主要包括listView_Item的控件类型
ViewHolder将需要缓存的view封装好,convertView的setTag才是将这些缓
存起来供下次调用。 当你的listview里布局多样化的时候 viewholder的作体
现明显,效率再一次提高。 View的findViewById()方法也是比较耗时的,因此
需要考虑只调用一次,之后就用View.getTag()方法来获得 ViewHolder对象
getView方法的代码例子:
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.item_main,null); viewHolder.iv = (ImageView) convertView.findViewById(R.id.icon); viewHolder.tv = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tv.setText((CharSequence) list.get(position).get("content")); viewHolder.iv.setImageResource((Integer) list.get(position).get("icon")); return convertView; } private class ViewHolder{ ImageView iv; TextView tv; }