在创建adapter对象时要继承BaseAdapter,引用到的一些方法
private final List<ItemBean> mList;
private final LayoutInflater inflater;
mList = list;
inflater = LayoutInflater.from(context);
}
public int getCount() {
return mList.size();
}
public Object getItem(int arg0) {
return mList.get(arg0);
}
public long getItemId(int arg0) {
return arg0;
}
public View getView(int position, View convertView, ViewGroup parent) {
// 逗比式,利用了ListView的视图缓存,再次调用时会重现使用findById()
// View view = inflater.inflate(R.layout.item, null);
// ImageView img = (ImageView) view.findViewById(R.id.image);
// TextView title = (TextView) view.findViewById(R.id.title);
// TextView content = (TextView) view.findViewById(R.id.content);
// img.setBackgroundResource(mList.get(arg0).ItemImage);
// title.setText(mList.get(arg0).ItemTitle);
// content.setText(mList.get(arg0).ItemContent);
// return view;
// 逗比式
// 普遍式,判断已经创建了视图缓存对象
// if (convertView == null) {
// convertView = inflater.inflate(R.layout.item, null);
// }
// ImageView img = (ImageView) convertView.findViewById(R.id.image);
// TextView title = (TextView) convertView.findViewById(R.id.title);
// TextView content = (TextView) convertView.findViewById(R.id.content);
// img.setBackgroundResource(mList.get(position).ItemImage);
// title.setText(mList.get(position).ItemTitle);
// content.setText(mList.get(position).ItemContent);
// return convertView;
// 普通式
// //文艺式:不仅利用了ListView的缓存,更通过ViewHolder类来实现显示数据的视图的缓存,避免多次通过findViewById寻找控件。
Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = inflater.inflate(R.layout.item, null);
holder.img = (ImageView) convertView.findViewById(R.id.image);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.content = (TextView) convertView.findViewById(R.id.content);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
ItemBean bean = mList.get(position);
holder.img.setImageResource(bean.ItemImage);
holder.title.setText(bean.ItemTitle);
holder.content.setText(bean.ItemContent);
return convertView;
// 文藝式
使用ViewHolder优化BaseAdapter的思路(如图)
需要注意几点:
1. Bean对象中封装ListView的每一行数据
2. MainActivity中创建并填充List<ItemBean> itemList;
for (int i=0; i<20; i++) {
itemList.add(new ItemBean(R.drawable.ic_launcher, "Title"+i, "I am an Android app debugger"+i));
}
3. 自定义适配器的构造方法中传入List<ItemBean> itemList数据
public MyAdapter(Context context, List<ItemBean> itemList) {
super();
this.itemList = itemList;
mInflater = LayoutInflater.from(context);
}
4. getView()方法中将当前的ItemBean数据对象填充到当前convertView中
ItemBean itemBean = itemList.get(position); //得到当前行的ItemBean对象,里面包含了数据
viewHolder.imageView.setImageResource(itemBean.imageResId);
viewHolder.title.setText(itemBean.title);
viewHolder.content.setText(itemBean.content);
return convertView;