使用BaseAdapter首先要重写里面的四个方法:
public int getCount()
//你的item的个数,也就是你需要展示的listView的列数。一般直接返回一个容器的size()
public Object getItem(int position)
//返回每个Item的数据
public long getItemId(int position)
//返回每个Item的ID,一般直接返回position
public View getView(int position, View convertView, ViewGroup parent)
//最重要的是:重绘视图,调用次数是由第一个方法确定的。最后将视图返回。
里面的参数 position是当前item的id,convertView是当前item的布局。
缓存处理:
如果listView过长当翻页时每次都需要重新加载控件这样十分浪费内存,就需要做缓存处理,通常的方法是写一个内部类的方式ViewHolder 用来储存已经加载过的控件。
public class PersonAdapter extends BaseAdapter { private List<Person> persons; private Context context; public PersonAdapter(List<Person> persons, Context context) { super(); this.persons = persons; this.context = context; } @Override public int getCount() { return persons.size(); } @Override public Object getItem(int position) { return persons.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); /** * 获取布局 */ convertView = View.inflate(context, R.layout.avtivity_item, null); //通过holder找到控件 holder.name = (TextView) convertView.findViewById(R.id.item_textView_name); holder.age = (TextView) convertView.findViewById(R.id.item_textView_age); holder.button = (Button) convertView.findViewById(R.id.item_button); //设置tag convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } //设置空间属性 holder.name.setText(persons.get(position).getName()); holder.age.setText(""+persons.get(position).getAge()); return convertView; } class ViewHolder { public TextView name; public TextView age; public Button button; } }
原文:http://my.oschina.net/u/2250447/blog/503707