您的位置:首页 > 其它

关于BaseAdapter在listView中的使用

2015-09-09 11:49 351 查看
使用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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: