前段时间公司项目有关需求,就是在同一个listview中要显示多种不同的条目,在网上找了个例子是加载两种视图的,但是我用起来却报出底层的异常,经过多次试验发现,原来在重写listview的getItemViewType(int position)方法是一定要返回一个0。贴个例子吧,以便后来的朋友们不要走弯路了,呵呵。 如下我要加载的条目的种类为4 class ActiveCenAdapter extends BaseAdapter{ private Context context; private ArrayList<News> infos; private AsyncImageLoader asyncImageLoader; private ListView listView; private static final int TYPE_MAX_COUNT=4; LayoutInflater vi;
public ActiveCenAdapter(Context context, ArrayList<News> infos,ListView listView) { this.context = context; this.infos = infos; asyncImageLoader = new AsyncImageLoader(); this.listView = listView; vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { if(infos != null && infos.size()>0){ return infos.size(); } return 0; } @Override public Object getItem(int position) { if(infos != null && infos.size()>0){ return infos.get(position); } return null; } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { if(position ==0){ return 0; } switch(infos.get(position).getType()){ case 3: return News.TYPE_FORWARD_VIDEO; case 1: return News.TYPE_VIDEO; case -1: return News.TYPE_EVENT_TIP; case 4: return News.TYPE_ILIKE_VIDEO; default: return 0; } } @Override public int getViewTypeCount() { return TYPE_MAX_COUNT+1; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final News info = infos.get(position); int type = info.getType(); final ListHolder listHolder; if (convertView == null) { listHolder = new ListHolder(); switch(type){ case News.TYPE_FORWARD_VIDEO: case News.TYPE_ILIKE_VIDEO: convertView = vi.inflate(R.layout.idol_bc_list_item, null); listHolder.portrait = (ImageView) convertView.findViewById(R.id.portrait); listHolder.nickname = (TextView) convertView.findViewById(R.id.nickname); 。。。。。。。。。 break; case News.TYPE_VIDEO: convertView = vi.inflate(R.layout.idol_create_list_item, null); 。。。。。。。。。 listHolder.portrait = (ImageView) convertView.findViewById(R.id.portrait); istHolder.comefrom = (TextView) convertView.findViewById(R.id.comefrom); break; case News.TYPE_EVENT_TIP: convertView = vi.inflate(R.layout.sys_info_list_item, null); listHolder.portrait = (ImageView) convertView.findViewById(R.id.portrait); 。。。。。。。 listHolder.sufinfo = (TextView) convertView.findViewById(R.id.suf_info); break; case 0: convertView = new View(context); break; default: convertView = new View(context); break; } convertView.setTag(listHolder); } else { listHolder = (ListHolder)convertView.getTag(); } if(type==News.TYPE_FORWARD_VIDEO ||type==News.TYPE_ILIKE_VIDEO){ 。。。。。。 }else if(type==News.TYPE_VIDEO){ 。。。。。。 }else if(type==News.TYPE_EVENT_TIP){ }else if(type==0){ }else{ } return convertView; } class ListHolder implements Serializable{ ImageView portrait; TextView nickname; TextView preinfo; TextView atteninfo; TextView sufinfo; TextView timepost; TextView comment; ImageView videoimage; TextView videotitle; TextView videoowner; TextView viewtime; TextView viewcount; TextView redirectcount; TextView likecount; TextView status; TextView comefrom; } }
|