很多项目中都用到了分类展示不同的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;
}
}