ListView不同Item的适配详解

来源:互联网 发布:java 字符串转义 编辑:程序博客网 时间:2024/05/16 08:47

本文将介绍ListView如何使用不同的布局作为Item


实现的示例效果:



图中实现了两种不同的布局,要实现使用不同的Item,就要在适配器(Adapter)中实现  下面两个方法

public int getViewTypeCount() { 
return 2;}

public int getItemViewType(int position) { return beens.get(position).getType(); }
getViewTypeCount() 是返回你的item类型的总数getItemViewType() 是返回你的当前item的类型

注意:
getItemViewType() 方法  返回的type必须是0开始的, 比如你有3种类型的item, 那么你在这个type就应该定义为0,1,2这3个类型;而不是1,2,3这3种类型;  而如果你用后面1,2,3定义类型的话, 就会报.ArrayIndexOutOfBoundsException 也就是越界的错误,因为你的
getViewTypeCount()为3,而当 getItemViewType返回3的话,实际上它的索引是4,所以就会报错。

上代码:
class MyAdapter extends BaseAdapter {        @Override        public int getCount() {            return beens.size();        }        @Override        public Object getItem(int i) {            return beens.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        //重点方法**设定你的布局有几中Item,        @Override        public int getViewTypeCount() {            return 2;        }        //重点方法** 用来判断当前的item是那种类型的,        @Override        public int getItemViewType(int position) {            return beens.get(position).getType();        }        @Override        public View getView(int position, View convertView, ViewGroup viewGroup) {            ViewHolder holder=null;            //获取当前的item的类型            int type=getItemViewType(position);            //convertView为空时,定义view            if(convertView==null){                switch (type){                    case 0:                        convertView= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item1,viewGroup,false);                        holder=new ViewHolder();                        holder.item1_name= (TextView) convertView.findViewById(R.id.item1_name);                        convertView.setTag(holder);                        break;                    case 1:                        convertView= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item2,viewGroup,false);                        holder=new ViewHolder();                        holder.item2_name= (TextView) convertView.findViewById(R.id.item2_name);                        holder.image_left= (ImageView) convertView.findViewById(R.id.item2_image_left);                        holder.iamge_right= (ImageView) convertView.findViewById(R.id.item2_image_right);                        convertView.setTag(holder);                        break;                }            }else {                holder = (ViewHolder) convertView.getTag();            }                switch (type){                    case 0:                        holder.item1_name.setText(beens.get(position).getItemName());                        break;                    case 1:                        holder.item2_name.setText(beens.get(position).getItemName());                        holder.image_left.setImageResource(R.mipmap.emoji_231);                        holder.iamge_right.setImageResource(R.mipmap.emoji_231);                        break;                }            return convertView;        }        class ViewHolder {            private TextView item1_name;            private TextView item2_name;            private ImageView image_left;            private ImageView iamge_right;        }    }











0 0
原创粉丝点击