分类型的listview

当我们需要在ListView中显示多种视图时,仍然使用继承BaseAdapter的方式,要注意的是getItemViewType(int position)和getViewTypeCount()这两个方法。 getViewTypeCount()就是获取列表有几种布局类型,getItemViewType(int position)是获取在position位置上的布局类型。

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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值