自定义适配器BaseAdapter

自定义适配器
继承抽象类 BaseAdapter;
拥有方法 getCount()返回item的数量 为数据源的数量

getItem(int position) 返回 所指定的数据 item所对应的数据对象;

getItemId(int position) 返回当前item的编号;可自定义,一般不会自定义


展现的效果为,每次有固定的item展现在屏幕上,如果有用过的item对象,返回给
这个方法,可以重复利用,view控件,而不用每次都创建新的view对象,避免了每次创建新的view对象导致的OOM 内存溢出;
public View getView(int position, View convertView, ViewGroup parent)
返回当前item中显示的View对象
1.position 是当前所点击的数据源的角标
2.convertView 可重复利用的控件,可能为空,需要对此进行判断,如果不为空则创建新的view对象如果不为空则利用起来;
3.parent 该控件所在組;

此方法经常用在listView 可上下的滑动控件 和
GridView 图片展示控件,即网格控件;
例:
class MyAdapter extends BaseAdapter{

private List list;//每次需要传入一个数据源,获得数据
private Context context;//需要一个上下文对象,获得布局对象,布局需要在layout中自定义

public MyAdapter(List list , Context context){
this.list = list;
this.context = context;
}
/**
*返回当前数据源所拥有的总数量
*/
@Override
public int getCount() {
//先进行非空判断,如果为空则返回0;
return list!=null?list.size():0;
}

/**
*返回当前数据源角标为position 的对象
*/
@Override
public Object getItem(int position) {
return list.get(position);
}

/**
* 返回当前数据源角标为position 的item的Id;
*/
@Override
public long getItemId(int position) {
//一般返回position就可以,因为position也是唯一的,也可以自定id
return position;
}


/**
*数据源拥有数据,并展现给屏幕。
*
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewItem item ;
//对返回的View控件重复利用,可以避免OOM;
if(convertView==null){
//获得布局天填充器
LoyoutInflater inflater = LoyoutInflater.from(context);
//将布局文件转换成view对象;
convertView = inflater.inflater(int 布局文件(https://www.360docs.net/doc/2f6136215.html,yout.自定义)
, root 显示到哪个控件即为父控件parent
,boolean attachToRoot 是否与控件绑定为false);
//获得该布局文件的id,并创建一个类,将其存入该类的对象,即一个布局文件和存储布局文件的控件类绑定,减少类的创建。
item = new ViewItem(convertView);
//与储存该控件的类进行绑定;
convertView.setTag(item);

}else{
item = convertView.getTag();
}
//设置控件内容;
https://www.360docs.net/doc/2f6136215.html,.setText(list.ge

t(position));
return convertView;
}
class ViewItem{
TextView tv;
ViewItem(View convertView){
https://www.360docs.net/doc/2f6136215.html, = convertView.findViewById(https://www.360docs.net/doc/2f6136215.html,);
}

}
}












相关文档
最新文档