自定义适配器的总结

 Java代码的实现部分:

1.继承BaseAdapter,实现BaseAdapter未实现的方法,包括:

     getCount(),      getItem(),      getItemId(),        getView()

 

getCount()  总条目的个数即就是数据源的长度,例如 list.sise()

 

getItem()    每个item上的数据源  例如数据源是实体类 那么每个Item上的数据源就是一 

            个entity类对象,如果数据源是List<Map<String,Object>>那么每个item就是  

           一个map数据

 

getItemId()   每一个item项的ID  return一个position即可

 

getView()     最重要的一个方法  将布局文件上的控件显示出来 注意:return为空的话将    

            不会显示视图

 

2.创建含参的构造方法,参数包括(Context,数据源(例如 List 集合))

        构造方法传递Contex 主要是将布局转换成View视图要用到

                   获取view视图用两种方法:

1.     用View.inflate() 静态方法

2.     先获取LayoutInflate 对象然后 对象.inflate() 方法  获取 view 视图

 

3. 书写getView方法,包括实例化控件,控件赋值

     代码优化:

         1.复用ConvertView  (作用:减少每次都用获取View视图)

         2.创建ViewHolder类,ViewHolder主要包括listView_Item的控件类型

           ViewHolder将需要缓存的view封装好,convertView的setTag才是将这些缓

           存起来供下次调用。 当你的listview里布局多样化的时候 viewholder的作体

           现明显,效率再一次提高。 View的findViewById()方法也是比较耗时的,因此

           需要考虑只调用一次,之后就用View.getTag()方法来获得 ViewHolder对象

getView方法的代码例子:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = inflater.inflate(R.layout.item_main,null);
        viewHolder.iv = (ImageView) convertView.findViewById(R.id.icon);
        viewHolder.tv = (TextView) convertView.findViewById(R.id.tv);
        convertView.setTag(viewHolder);
    }else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.tv.setText((CharSequence) list.get(position).get("content"));
    viewHolder.iv.setImageResource((Integer) list.get(position).get("icon"));

    return convertView;
}
private  class  ViewHolder{
    ImageView iv;
    TextView tv;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值