(1).建立2个XML文件,一个是ListView控件,另一个是根据需求建立的布局文件
(2).定义一个ListVIiew并初始化,并建立private List<Map<String, Object>> getData()这个方法来存储ListVIiew的数据
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "b1");
map.put("info", "android 1");
map.put("img", R.drawable.b1);
list.add(map);
(title,info,img是布局文件中各个控件的ID)
(3).建立一个新的类MyAdapter继承BaseAdapter,并 添加成员变量(Context,List) 添加构造方法 给构造方法传一个形参(context,list)
// 上下文
// Context con;
// 源数据
List<Map<String, Object>> list;
// 把xml布局文件转化成View文件所需要的类
private LayoutInflater mInflater;
public MyAdatper(Context con, List<Map<String, Object>> list) {
// this.con = con;
this.list = list;
this.mInflater = LayoutInflater.from(con);
}
(4).重写主要方法:第一个是:getCount();表示ListVIiew里面有多少Item(条).第二个是:public View getView(int position, View convertView, ViewGroup parent) ,在此方法中,用convertView.inflate(布局模板,NULL)方法得到一个布局模板的View对象(此方法是将一个XML文件转换成一个View对象),用此View对象得到 布局模板中的控件对象(findViewById()方法),为了方便,我们一般建立需要建一个定义控件专门的类,通过实例化这个类来调用里面的所有控件对象,在通过setXXX()这些方法来获取各个控件的内容。
public View getView(int position, View convertView, ViewGroup parent) {
// 把布局文件转化成View
convertView = mInflater.inflate(R.layout.listitem, null);
// 实例化工具类
ViewHolder holder = new ViewHolder();
// 通过布局找到布局中的控件
holder.img = (ImageView) convertView.findViewById(R.id.img);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.info = (TextView) convertView.findViewById(R.id.info);
holder.img.setBackgroundResource((Integer) list.get(position)
.get("img"));
holder.info.setText((CharSequence) list.get(position).get("info"));
holder.title.setText((String) list.get(position).get("title"));
// 返回布局
return convertView;
}
class ViewHolder {
ImageView img;
TextView title, info;
}
(5).在Activity类中实例化适配器(实例化MyAdapter),并设置ListView的适配器
// 实例化适配器
myAdapter = new MyAdatper(this, getData());
// 设置ListView的适配器
lisrView.setAdapter(myadapter);