|
前段時間公司項目有關需求,就是在同一個listview中要顯示多種不同的條目,在網(wǎng)上找了個例子是加載兩種視圖的,但是我用起來卻報出底層的異常,經過多次試驗發(fā)現(xiàn),原來在重寫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; } }
|