当我们需要在ListView中显示多种视图时,仍然使用继承BaseAdapter的方式,要注意的是getItemViewType(int position)和getViewTypeCount()这两个方法。
private static final int TYPE_VIDEO = 0; /** * 图片 */ private static final int TYPE_IMAGE = 1; /** * 文字 */ private static final int TYPE_TEXT = 2; /** * GIF图片 */ private static final int TYPE_GIF = 3; /** * 软件推广 */ private static final int TYPE_AD = 4; private Context context; private List<NetAudioPagerData.ListBean> list; private TimeUtils utils; public NetAudioPagerAdapter(Context context, List<NetAudioPagerData.ListBean> datas) { this.context=context; this.list=datas; utils=new TimeUtils(); } //重写这个方法,返回多少个类型 @Override public int getViewTypeCount() { return 5; }
//返回类型 @Override public int getItemViewType(int position) { NetAudioPagerData.ListBean listEntity = list.get(position); String type = listEntity.getType();//video,text,image,gif,ad int itemViewType = -1; if ("video".equals(type)) { itemViewType = TYPE_VIDEO; } else if ("image".equals(type)) { itemViewType = TYPE_IMAGE; } else if ("text".equals(type)) { itemViewType = TYPE_TEXT; } else if ("gif".equals(type)) { itemViewType = TYPE_GIF; } else { itemViewType = TYPE_AD;//广播 } return itemViewType; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { int itemViewType = getItemViewType(position) ;//得到类型 ViewHolder viewHolder; if(convertView ==null){ //初始化 //初始化item布局 viewHolder = new ViewHolder(); convertView = initView(convertView, itemViewType, viewHolder); //初始化公共的视图 initCommonView(convertView, itemViewType, viewHolder); //设置tag convertView.setTag(viewHolder); }else{ //获取tag viewHolder = (ViewHolder) convertView.getTag(); } //绑定数据 //根据位置得到数据,绑定数据 NetAudioPagerData.ListBean mediaItem = list.get(position); bindData(itemViewType, viewHolder, mediaItem); return convertView; }
static class ViewHolder { //user_info ImageView iv_headpic; TextView tv_name; TextView tv_time_refresh; ImageView iv_right_more; //bottom ImageView iv_video_kind; TextView tv_video_kind_text; TextView tv_shenhe_ding_number; TextView tv_shenhe_cai_number; TextView tv_posts_number; LinearLayout ll_download; //中间公共部分 -所有的都有 TextView tv_context; //Video // TextView tv_context; TextView tv_play_nums; TextView tv_video_duration; ImageView iv_commant; TextView tv_commant_context; JCVideoPlayerStandard jcv_videoplayer; //Image ImageView iv_image_icon; // TextView tv_context; //Text // TextView tv_context; //Gif GifImageView iv_image_gif; // TextView tv_context; //软件推广 Button btn_install; // TextView iv_image_icon; //TextView tv_context; }initView时再分类型返回不同的布局
private View initView(View convertView, int itemViewType, ViewHolder viewHolder) { switch (itemViewType) { case TYPE_VIDEO://视频 convertView = View.inflate(context, R.layout.all_video_item, null); //在这里实例化特有的 viewHolder.tv_play_nums = (TextView) convertView.findViewById(R.id.tv_play_nums); viewHolder.tv_video_duration = (TextView) convertView.findViewById(R.id.tv_video_duration); viewHolder.iv_commant = (ImageView) convertView.findViewById(R.id.iv_commant); viewHolder.tv_commant_context = (TextView) convertView.findViewById(R.id.tv_commant_context); viewHolder.jcv_videoplayer = (JCVideoPlayerStandard) convertView.findViewById(R.id.jcv_videoplayer); break; case TYPE_IMAGE://图片 convertView = View.inflate(context, R.layout.all_image_item, null); viewHolder.iv_image_icon = (ImageView) convertView.findViewById(R.id.iv_image_icon); break; case TYPE_TEXT://文字 convertView = View.inflate(context, R.layout.all_text_item, null); break; case TYPE_GIF://gif convertView = View.inflate(context, R.layout.all_gif_item, null); viewHolder.iv_image_gif = (GifImageView) convertView.findViewById(R.id.iv_image_gif); break; case TYPE_AD://软件广告 convertView = View.inflate(context, R.layout.all_ad_item, null); viewHolder.btn_install = (Button) convertView.findViewById(R.id.btn_install); viewHolder.iv_image_icon = (ImageView) convertView.findViewById(R.id.iv_image_icon); break; } return convertView; }还有分开绑定数据:private void bindData(int itemViewType, ViewHolder viewHolder, NetAudioPagerData.ListBean mediaItem) { switch (itemViewType) { case TYPE_VIDEO://视频 bindData(viewHolder, mediaItem); //第一个参数是视频播放地址,第二个参数是显示封面的地址,第三参数是标题 viewHolder.jcv_videoplayer.setUp(mediaItem.getVideo().getVideo().get(0), JCVideoPlayerStandard.SCREEN_LAYOUT_LIST, ""); // viewHolder.jcv_videoplayer.setUp(mediaItem.getVideo().getVideo().get(0), mediaItem.getVideo().getThumbnail().get(0), null); //viewHolder.jcv_videoplayer.thumbImageView.setThumbInCustomProject("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640"); viewHolder.jcv_videoplayer.thumbImageView.setImageURI(Uri.parse(mediaItem.getVideo().getThumbnail().get(0))); viewHolder.tv_play_nums.setText(mediaItem.getVideo().getPlaycount() + "次播放"); viewHolder.tv_video_duration.setText(utils.stringForTime(mediaItem.getVideo().getDuration() * 1000) + ""); break; case TYPE_IMAGE://图片 bindData(viewHolder, mediaItem); viewHolder.iv_image_icon.setImageResource(R.drawable.bg_item); int height = mediaItem.getImage().getHeight()<= DensityUtil.getScreenHeight()*0.75?mediaItem.getImage().getHeight(): (int) (DensityUtil.getScreenHeight() * 0.75); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DensityUtil.getScreenWidth(),height); viewHolder.iv_image_icon.setLayoutParams(params); if(mediaItem.getImage() != null && mediaItem.getImage().getBig()!= null&&mediaItem.getImage().getBig().size() >0){ // x.image().bind(viewHolder.iv_image_icon, mediaItem.getImage().getBig().get(0)); Glide.with(context).load(mediaItem.getImage().getBig().get(0)).placeholder(R.drawable.bg_item).error(R.drawable.bg_item).diskCacheStrategy(DiskCacheStrategy.ALL).into(viewHolder.iv_image_icon); } break; case TYPE_TEXT://文字 bindData(viewHolder, mediaItem); break; case TYPE_GIF://gif bindData(viewHolder, mediaItem); System.out.println("mediaItem.getGif().getImages().get(0)" + mediaItem.getGif().getImages().get(0)); Glide.with(context).load(mediaItem.getGif().getImages().get(0)).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(viewHolder.iv_image_gif); break; case TYPE_AD://软件广告 break; }bindData(viewHolder, mediaItem);//这个是共同的部分,抽取出来上面的代码涉及到listview中的视频播放,GIF加载:请看下一篇:JC播放器:http://blog.csdn.net/keep_moving12138/article/details/76204276