listView分类型,getItemViewType()的用法

本文介绍了一种用于安卓应用的分类型UI适配器实现方法,通过自定义Adapter来根据不同类型的数据显示不同的UI布局,包括无图、大图、左缩略图、三图、右缩略图和视频模式。

很多项目中都用到了分类展示不同的UI,比如一个列表中有几种不同样式的item就可以用分类型的方式展示。。。下面以adapter为例。

getItemView()的用法。。

package com.palmnewsclient.test;


import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;


import com.bumptech.glide.Glide;
import com.newnet.ydc.palmNews.R;
import com.palmnewsclient.bean.NewsListBean;
import com.palmnewsclient.data.AppConfig;
import com.palmnewsclient.newcenter.helper.NewHelpUtils;
import com.palmnewsclient.utils.AppManager;
import com.palmnewsclient.utils.Constant;
import com.palmnewsclient.utils.Constants;
import com.palmnewsclient.utils.LoggerUtil;
import com.palmnewsclient.utils.MoudleControlUtils;
import com.palmnewsclient.utils.SPUtils;
import com.palmnewsclient.utils.ScreenUtils;
import com.palmnewsclient.videocenter.VideoActivity;


import java.util.ArrayList;
import java.util.List;


import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer;
import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard;


/**
 * Created by 24543 on 2017/5/9.
 * 首页新闻列表adapter
 * 分类型的
 */
public class NewsTypeListAdapter1 extends BaseAdapter {


    private Context mContext;
    LinearLayout linearLayout = null;
    LayoutInflater inflater;
    private List<NewsListBean.BodyEntity.DataEntity> mNewLists = new ArrayList<>();
    private int thrumbSize;


    private final int TYPE_1 = 0;//无图模式
    private final int TYPE_2 = 1;//大图模式
    private final int TYPE_3 = 2;//左缩略图
    private final int TYPE_4 = 3;//三图模式
    private final int TYPE_5 = 4;//右缩略图
    private final int TYPE_6 = 5;//视频模式
    private boolean isLoadTime;


    public NewsTypeListAdapter1(Context mContext, List<NewsListBean.BodyEntity.DataEntity> mNewLists) {
        this.mContext = mContext;
        this.mNewLists = mNewLists;


    }


    @Override
    public int getViewTypeCount() {
        return 6;
    }


    @Override
    public int getCount() {
        return mNewLists.size();
    }


    @Override
    public int getItemViewType(int position) {
        //解决bug1658
        int showType = mNewLists.get(position).getShowType();
        LoggerUtil.error("showType=" + showType);
        if (showType == TYPE_1) {
            if (mNewLists.get(position).getNewType() == 10) {
                showType = TYPE_6;  //视频
            } else {
                showType = TYPE_1; //无图
            }
        }
        return showType;
    }


    @Override
    public Object getItem(int i) {
        return mNewLists.get(i);
    }


    @Override
    public long getItemId(int i) {
        return i;
    }




    @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        //类型为99的时候为广告
        TypeViewHolder1 holder1 = null;
        TypeViewHolder2 holder2 = null;
        TypeViewHolder3 holder3 = null;
        TypeViewHolder4 holder4 = null;
        TypeViewHolder5 holder5 = null;
        TypeViewHolder6 holder6 = null;
        int type = getItemViewType(position);
        if (convertView == null) {
            inflater = LayoutInflater.from(mContext);
            // 按当前所需的样式,确定news的布局
            switch (type) {
                case TYPE_1:
                    convertView = inflater.inflate(R.layout.item_news_type_no_img, parent, false);
                    holder1 = new TypeViewHolder1();
                    holder1.type1Title = (TextView) convertView.findViewById(R.id.tv_new_type1_title);
                    holder1.type1Time = (TextView) convertView.findViewById(R.id.tv_new_type1_time);
                    holder1.type1Lable = (TextView) convertView.findViewById(R.id.tv_new_type1_lable);
                    holder1.type1Lable2 = (TextView) convertView.findViewById(R.id.tv_new_type1_lable2);
                    holder1.type1Lable3 = (TextView) convertView.findViewById(R.id.tv_new_type1_lable3);
                    convertView.setTag(holder1);
                    break;
                case TYPE_2:
                    convertView = inflater.inflate(R.layout.item_news_type_big_img, parent, false);
                    holder2 = new TypeViewHolder2();
                    holder2.type2Title = (TextView) convertView.findViewById(R.id.tv_new_type2_title);
                    holder2.type2Time = (TextView) convertView.findViewById(R.id.tv_new_type2_time);
                    holder2.type2Lable = (TextView) convertView.findViewById(R.id.tv_new_type2_lable);
                    holder2.type2Lable2 = (TextView) convertView.findViewById(R.id.tv_new_type2_lable2);
                    holder2.type2Lable3 = (TextView) convertView.findViewById(R.id.tv_new_type2_lable3);
                    holder2.ivtype2Img = (ImageView) convertView.findViewById(R.id.iv_new_type2_img);
                    ScreenUtils.setSeven_Sixteenth(mContext, holder2.ivtype2Img);
                    convertView.setTag(holder2);
                    break;
                case TYPE_3:
                    convertView = inflater.inflate(R.layout.item_news_type_thumb_left_img, parent, false);
                    holder3 = new TypeViewHolder3();
                    holder3.type3Title = (TextView) convertView.findViewById(R.id.tv_new_type3_title);
                    holder3.type3Time = (TextView) convertView.findViewById(R.id.tv_new_type3_time);
                    holder3.type3Lable = (TextView) convertView.findViewById(R.id.tv_new_type3_lable);
                    holder3.type3Lable2 = (TextView) convertView.findViewById(R.id.tv_new_type3_lable2);
                    holder3.type3Lable3 = (TextView) convertView.findViewById(R.id.tv_new_type3_lable3);
                    holder3.ivtype3Img = (ImageView) convertView.findViewById(R.id.iv_new_type3_img);
                    convertView.setTag(holder3);
                    break;
                case TYPE_4:
                    convertView = inflater.inflate(R.layout.item_news_type_three_img, parent, false);
                    holder4 = new TypeViewHolder4();
                    holder4.type4Title = (TextView) convertView.findViewById(R.id.tv_new_type4_title);
                    holder4.type4Time = (TextView) convertView.findViewById(R.id.tv_new_type4_time);
                    holder4.type4Lable = (TextView) convertView.findViewById(R.id.tv_new_type4_lable);
                    holder4.type4Lable2 = (TextView) convertView.findViewById(R.id.tv_new_type4_lable2);
                    holder4.type4Lable3 = (TextView) convertView.findViewById(R.id.tv_new_type4_lable3);
                    holder4.ivtype4Img1 = (ImageView) convertView.findViewById(R.id.iv_new_type4_img1);
                    holder4.ivtype4Img2 = (ImageView) convertView.findViewById(R.id.iv_new_type4_img2);
                    holder4.ivtype4Img3 = (ImageView) convertView.findViewById(R.id.iv_new_type4_img3);
                    holder4.llImgthrumb = (LinearLayout) convertView.findViewById(R.id.ll_imgthrumb);
                    holder4.tvImgthrumbNum = (TextView) convertView.findViewById(R.id.tv_imgthrumb_num);
                    holder4.llThreeImage = (LinearLayout) convertView.findViewById(R.id.ll_three_image);
                    convertView.setTag(holder4);
                    break;
                case TYPE_5:
                    convertView = inflater.inflate(R.layout.item_news_type_thumb_right_img, parent, false);
                    holder5 = new TypeViewHolder5();
                    holder5.type5Title = (TextView) convertView.findViewById(R.id.tv_new_type5_title);
                    holder5.type5Time = (TextView) convertView.findViewById(R.id.tv_new_type5_time);
                    holder5.type5Lable = (TextView) convertView.findViewById(R.id.tv_new_type5_lable);
                    holder5.type5Lable2 = (TextView) convertView.findViewById(R.id.tv_new_type5_lable2);
                    holder5.type5Lable3 = (TextView) convertView.findViewById(R.id.tv_new_type5_lable3);
                    holder5.ivtype5Img = (ImageView) convertView.findViewById(R.id.iv_new_type5_img);
                    convertView.setTag(holder5);
                    break;
                case TYPE_6:
                    convertView = inflater.inflate(R.layout.item_news_type_video, parent, false);
                    holder6 = new TypeViewHolder6();
                    holder6.jcVideoPlayer = (JCVideoPlayerStandard) convertView.findViewById(R.id.jc_video);
                    convertView.setTag(holder6);
                    break;
            }
        } else {
            switch (type) {
                case TYPE_1:
                    holder1 = (TypeViewHolder1) convertView.getTag();
                    break;
                case TYPE_6:
                    holder6 = (TypeViewHolder6) convertView.getTag();
                    break;
                case TYPE_2:
                    holder2 = (TypeViewHolder2) convertView.getTag();
                    break;
                case TYPE_3:
                    holder3 = (TypeViewHolder3) convertView.getTag();
                    break;
                case TYPE_4:
                    holder4 = (TypeViewHolder4) convertView.getTag();
                    break;
                case TYPE_5:
                    holder5 = (TypeViewHolder5) convertView.getTag();
                    break;
            }
        }


        NewsListBean.BodyEntity.DataEntity dataEntity = mNewLists.get(position);


        String publicTime = dataEntity.getPublicTime();
        isLoadTime = MoudleControlUtils.isNeedView(mContext, AppConfig.MODEL_NEWS_PUBLIC_TIME);
        String resultPublicTime = null;
        if (publicTime == null) {
            resultPublicTime = "";
        } else {
            if (isLoadTime) {
                resultPublicTime = publicTime;
            } else {
                resultPublicTime = publicTime.substring(0, 10);
            }


        }




        boolean haveChanged = SPUtils.getBooleanType(mContext, Constant.IMAGE_SHOW_STATE_CHANGED);
        boolean imageState = SPUtils.getBooleanType(mContext, Constant.IMAGE_SHOW_STATE);


        // 设置资源
        switch (type) {
            case TYPE_1:
                holder1.type1Title.setText(dataEntity.getTitle());
                holder1.type1Time.setText(resultPublicTime);
                //判断是否显示专题标签
                if (dataEntity.getNewType() == 5) {
                    holder1.type1Lable.setVisibility(View.VISIBLE);
                } else
                    holder1.type1Lable.setVisibility(View.GONE);
                //显示置顶
                if ((dataEntity.getShowPosition() & 8) == 8) {
                    holder1.type1Lable3.setVisibility(View.VISIBLE);
                } else
                    holder1.type1Lable3.setVisibility(View.GONE);
                //显示广告
                if (dataEntity.getNewType() == 99) {
                    holder1.type1Lable2.setVisibility(View.VISIBLE);
                } else
                    holder1.type1Lable2.setVisibility(View.GONE);
                break;
            case TYPE_2:
                holder2.type2Title.setText(dataEntity.getTitle());
                holder2.type2Time.setText(resultPublicTime);
                if (dataEntity.getNewType() == 99) {
                    holder2.type2Lable2.setVisibility(View.VISIBLE);
                } else
                    holder2.type2Lable2.setVisibility(View.GONE);
                //判断是否显示专题标签
                if (dataEntity.getNewType() == 5) {
                    holder2.type2Lable.setVisibility(View.VISIBLE);
                } else
                    holder2.type2Lable.setVisibility(View.GONE);
                //判断是否显示置顶
                if ((dataEntity.getShowPosition() & 8) == 8) {
                    holder2.type2Lable3.setVisibility(View.VISIBLE);
                } else
                    holder2.type2Lable3.setVisibility(View.GONE);
                if (haveChanged) {
                    //判断是否显示图片
                    if (imageState) {
                        holder2.ivtype2Img.setVisibility(View.VISIBLE);
                        Glide.with(mContext).load(dataEntity.getThumbPath()).into(holder2.ivtype2Img);
                    } else {
                        holder2.ivtype2Img.setVisibility(View.GONE);
                    }
                } else {
                    Glide.with(mContext).load(dataEntity.getThumbPath()).into(holder2.ivtype2Img);
                    holder2.ivtype2Img.setVisibility(View.VISIBLE);
                }


                break;
            case TYPE_3:
                holder3.type3Title.setText(dataEntity.getTitle());
                holder3.type3Time.setText(resultPublicTime);
                if (dataEntity.getNewType() == 99) {
                    holder3.type3Lable2.setVisibility(View.VISIBLE);
                } else
                    holder3.type3Lable2.setVisibility(View.GONE);
                //判断是否显示专题标签
                if (dataEntity.getNewType() == 5) {
                    holder3.type3Lable.setVisibility(View.VISIBLE);
                } else
                    holder3.type3Lable.setVisibility(View.GONE);
                //显示置顶
                if ((dataEntity.getShowPosition() & 8) == 8) {
                    holder3.type3Lable3.setVisibility(View.VISIBLE);
                } else
                    holder3.type3Lable3.setVisibility(View.GONE);
                //判断是否显示图片
                if (haveChanged) {
                    //判断是否显示图片
                    if (imageState) {
                        holder3.ivtype3Img.setVisibility(View.VISIBLE);
                        Glide.with(mContext).load(dataEntity.getThumbPath()).into(holder3.ivtype3Img);
                    } else {
                        holder3.ivtype3Img.setVisibility(View.GONE);
                    }
                } else {
                    Glide.with(mContext).load(dataEntity.getThumbPath()).into(holder3.ivtype3Img);
                    holder3.ivtype3Img.setVisibility(View.VISIBLE);
                }


                break;
            case TYPE_4:
                holder4.type4Title.setText(dataEntity.getTitle());
                holder4.type4Time.setText(resultPublicTime);
                String imageUrl = dataEntity.getThumbPath();
                ArrayList<String> paths = new ArrayList<>();
                if (!TextUtils.isEmpty(imageUrl)) {
                    String[] imgs = imageUrl.split(",");
                    for (int i = 0; i < imgs.length; i++) {
                        paths.add(imgs[i]);
                    }
                }
                if (dataEntity.getNewType() == 99) {
                    holder4.type4Lable2.setVisibility(View.VISIBLE);
                } else
                    holder4.type4Lable2.setVisibility(View.GONE);
                //判断是否显示专题标签
                if (dataEntity.getNewType() == 5) {
                    holder4.type4Lable.setVisibility(View.VISIBLE);
                } else
                    holder4.type4Lable.setVisibility(View.GONE);
                //显示置顶
                if ((dataEntity.getShowPosition() & 8) == 8) {
                    holder4.type4Lable3.setVisibility(View.VISIBLE);
                } else
                    holder4.type4Lable3.setVisibility(View.GONE);
                if (haveChanged) {
                    if (imageState) {
                        holder4.ivtype4Img1.setVisibility(View.VISIBLE);
                        holder4.ivtype4Img2.setVisibility(View.VISIBLE);
                        holder4.ivtype4Img3.setVisibility(View.VISIBLE);
                        holder4.llThreeImage.setVisibility(View.VISIBLE);
                        if (paths.size() > 0) {
                            Glide.with(mContext).load(paths.get(0).toString()).into(holder4.ivtype4Img1);
                            Glide.with(mContext).load(paths.get(1).toString()).into(holder4.ivtype4Img2);
                            Glide.with(mContext).load(paths.get(2).toString()).into(holder4.ivtype4Img3);
                        }
                        //判断显示图集标签
                        if (dataEntity.getNewType() == 4) {
                            holder4.llImgthrumb.setVisibility(View.VISIBLE);
                            holder4.tvImgthrumbNum.setText(dataEntity.getSecretStatus() + "");
                        } else {
                            holder4.llImgthrumb.setVisibility(View.GONE);
                        }
                    } else {
                        holder4.ivtype4Img1.setVisibility(View.GONE);
                        holder4.ivtype4Img2.setVisibility(View.GONE);
                        holder4.ivtype4Img3.setVisibility(View.GONE);
                        holder4.llImgthrumb.setVisibility(View.GONE);
                        holder4.llThreeImage.setVisibility(View.GONE);
                    }
                } else {
                    if (paths.size() > 0) {
                        Glide.with(mContext).load(paths.get(0).toString()).into(holder4.ivtype4Img1);
                        Glide.with(mContext).load(paths.get(1).toString()).into(holder4.ivtype4Img2);
                        Glide.with(mContext).load(paths.get(2).toString()).into(holder4.ivtype4Img3);
                        holder4.ivtype4Img1.setVisibility(View.VISIBLE);
                        holder4.ivtype4Img2.setVisibility(View.VISIBLE);
                        holder4.ivtype4Img3.setVisibility(View.VISIBLE);
                    }
                }
                break;
            case TYPE_5:
                holder5.type5Title.setText(dataEntity.getTitle());
                holder5.type5Time.setText(resultPublicTime);
                //判断是否显示专题标签
                if (dataEntity.getNewType() == 5) {
                    holder5.type5Lable.setVisibility(View.VISIBLE);
                } else
                    holder5.type5Lable.setVisibility(View.GONE);
                if (dataEntity.getNewType() == 99) {
                    holder5.type5Lable2.setVisibility(View.VISIBLE);
                } else
                    holder5.type5Lable2.setVisibility(View.GONE);
                //显示置顶
                if ((dataEntity.getShowPosition() & 8) == 8) {
                    holder5.type5Lable3.setVisibility(View.VISIBLE);
                } else
                    holder5.type5Lable3.setVisibility(View.GONE);
                //判断是否显示图片
                if (haveChanged) {
                    //判断是否显示图片
                    if (imageState) {
                        holder5.ivtype5Img.setVisibility(View.VISIBLE);
                        Glide.with(mContext).load(dataEntity.getThumbPath()).into(holder5.ivtype5Img);
                    } else {
                        holder5.ivtype5Img.setVisibility(View.GONE);
                    }
                } else {
                    Glide.with(mContext).load(dataEntity.getThumbPath()).into(holder5.ivtype5Img);
                    holder5.ivtype5Img.setVisibility(View.VISIBLE);
                }
                break;
            case TYPE_6:
                ScreenUtils.setNine_Sixteenth(mContext, holder6.jcVideoPlayer.thumbImageView);
                ScreenUtils.setNine_Sixteenth(mContext, holder6.jcVideoPlayer);
                //假数据,待替换
                holder6.jcVideoPlayer.setUp("http://115.182.42.91/image/party_uploadfiles/video/2017_08_11_13/0cc2d4f0-73d9-4f99-97c1-32a6778a9736.mp4", JCVideoPlayer.SCREEN_LAYOUT_LIST, dataEntity.getTitle());
                holder6.jcVideoPlayer.getPreviewImage(mContext, dataEntity.getThumbPath());
                holder6.jcVideoPlayer.setOnTitleBarRightBtnClickListener(() -> {
                    NewsListBean.BodyEntity.DataEntity dataEntity1 = mNewLists.get(position);
                    Bundle bundle = new Bundle();
                    String newsUrl = NewHelpUtils.getNewsUrlByNewsType(mContext, dataEntity1.getNewType(), dataEntity1.getContentId(), SPUtils.getStringType(mContext, Constants.USER_LOGIN_TOKEN));
                    bundle.putString(Constants.NEW_DETAIL_URL, newsUrl);
                    bundle.putSerializable(Constants.NEW_DETAIL_SHARE_BEAN, dataEntity1);
                    AppManager.getInstance().jumpActivity((Activity) mContext, VideoActivity.class, bundle);
                });
                break;
        }


        return convertView;
    }


    public void updateDatas(List<NewsListBean.BodyEntity.DataEntity> publicList) {
        if (publicList.size() != 0) {
            mNewLists.clear();
            mNewLists.addAll(publicList);
        }
        notifyDataSetChanged();
    }




    class TypeViewHolder1 {
        TextView type1Title, type1Time, type1Lable, type1Lable2, type1Lable3;
    }


    class TypeViewHolder2 {
        TextView type2Title, type2Time, type2Lable, type2Lable2, type2Lable3;
        ImageView ivtype2Img;
    }


    class TypeViewHolder3 {
        TextView type3Title, type3Time, type3Lable, type3Lable2, type3Lable3;
        ImageView ivtype3Img;
    }


    class TypeViewHolder4 {
        TextView type4Title, type4Time, type4Lable, tvImgthrumbNum, type4Lable2, type4Lable3;
        ImageView ivtype4Img1, ivtype4Img2, ivtype4Img3;
        LinearLayout llImgthrumb, llThreeImage;
    }


    class TypeViewHolder5 {
        TextView type5Title, type5Time, type5Lable, type5Lable2, type5Lable3;
        ImageView ivtype5Img;
    }


    class TypeViewHolder6 {
        JCVideoPlayerStandard jcVideoPlayer;
    }
}







评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值