package com.weikou.beibeivideo.ui.recommend;
|
|
import android.app.Activity;
|
import android.content.Intent;
|
import android.support.v7.widget.RecyclerView;
|
import android.text.SpannableString;
|
import android.text.Spanned;
|
import android.text.style.AbsoluteSizeSpan;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.View.OnClickListener;
|
import android.view.ViewGroup;
|
import android.widget.FrameLayout;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.RelativeLayout;
|
import android.widget.TextView;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.target.DrawableImageViewTarget;
|
import com.bytedance.sdk.openadsdk.TTAdDislike;
|
import com.google.gson.FieldNamingPolicy;
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.lcjian.library.util.common.DimenUtils;
|
import com.lcjian.library.util.common.StringUtils;
|
import com.lcjian.library.widget.RatioLayout;
|
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
|
import com.weikou.beibeivideo.BeibeiVideoAPI;
|
import com.weikou.beibeivideo.R;
|
import com.weikou.beibeivideo.entity.HomeType;
|
import com.weikou.beibeivideo.entity.HomeVideo;
|
import com.weikou.beibeivideo.entity.VideoInfo;
|
import com.weikou.beibeivideo.entity.VideoType;
|
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
|
import com.weikou.beibeivideo.entity.recommend.HomeTypeContent;
|
import com.weikou.beibeivideo.entity.recommend.RecommendContent;
|
import com.weikou.beibeivideo.entity.recommend.holder.RecommendVideoAdHolder;
|
import com.weikou.beibeivideo.entity.video.holder.HeaderViewHolder;
|
import com.weikou.beibeivideo.entity.video.holder.VideoHolder;
|
import com.weikou.beibeivideo.ui.common.VideosLiveActivity;
|
import com.weikou.beibeivideo.ui.discover.StarsActivity;
|
import com.weikou.beibeivideo.ui.media.VideoDetailActivity2;
|
import com.weikou.beibeivideo.ui.video.VideoRecommendAdapter;
|
import com.weikou.beibeivideo.util.JumpActivityUtil;
|
import com.weikou.beibeivideo.util.VideoUtil;
|
import com.weikou.beibeivideo.util.ad.AdUtil;
|
import com.weikou.beibeivideo.util.ad.ExpressAdManager;
|
import com.weikou.beibeivideo.util.video.VideoUIUtil;
|
|
import org.apache.http.Header;
|
import org.json.JSONArray;
|
|
import java.text.DecimalFormat;
|
import java.util.ArrayList;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.TreeSet;
|
|
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
|
|
public class RecommendNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
private final static String TAG = "RecommendNewAdapter";
|
|
private Activity mContext;
|
List<Object> contentList;
|
private LayoutInflater inflater;
|
private TreeSet mADSet = new TreeSet();
|
|
public final int TYPE_HEADER = 10001;
|
|
private Gson gson = new GsonBuilder().setVersion(1.0).setFieldNamingPolicy(
|
FieldNamingPolicy.UPPER_CAMEL_CASE)
|
.create();
|
|
private View headerView;
|
|
public void setHeaderView(View view) {
|
this.headerView = view;
|
}
|
|
public RecommendNewAdapter(Activity context, List contentList) {
|
this.mContext = context;
|
this.contentList = contentList;
|
inflater = LayoutInflater.from(mContext);
|
}
|
|
/**
|
* 添加数据项
|
*
|
* @param item
|
*/
|
public void addNormalItem(HomeType item) {
|
contentList.add(item);
|
}
|
|
/**
|
* 获取广告数量
|
*
|
* @return
|
*/
|
public int getAdCount() {
|
return mADSet.size();
|
}
|
|
/**
|
* 添加广告到指定位置
|
*
|
* @param ad
|
* @param position
|
*/
|
public void addAdToPosition(ExpressAdContainer ad, int position) {
|
if (position >= 0 && position < contentList.size()) {
|
contentList.add(position, ad);
|
mADSet.add(position);
|
}
|
Log.i(TAG, "addAdToPosition");
|
}
|
|
public void addAd(ExpressAdContainer ad) {
|
contentList.add(ad);
|
Log.i(TAG, "addAd");
|
}
|
|
public void removeAd(ExpressAdContainer ad) {
|
if (mADSet != null)
|
for (Iterator<Integer> its = mADSet.iterator(); its.hasNext(); ) {
|
int p = its.next();
|
if (p < contentList.size() && contentList.get(p) == ad) {
|
mADSet.remove(p);
|
contentList.remove(p);
|
notifyDataSetChanged();
|
}
|
}
|
}
|
|
|
public void removeAllAd() {
|
if (contentList != null)
|
for (int i = 0; i < contentList.size(); i++) {
|
if (contentList.get(i) instanceof ExpressAdContainer) {
|
contentList.remove(i);
|
i--;
|
}
|
}
|
mADSet.clear();
|
}
|
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
switch (viewType) {
|
case TYPE_HEADER:
|
return new HeaderViewHolder(headerView);
|
case RecommendContent.TYPE_HOMETYPE:
|
return new HomeTypeHolder(inflater.inflate(R.layout.item_recommend_home_type, null, false), new RecyclerView.RecycledViewPool());
|
case RecommendContent.TYPE_AD:
|
return new AdHolder(inflater.inflate(R.layout.item_recommend_home_type_ad, parent, false));
|
}
|
return null;
|
}
|
|
|
@Override
|
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
|
if (viewHolder instanceof HeaderViewHolder)
|
return;
|
int p = i;
|
if (headerView != null)
|
p--;
|
|
|
if (viewHolder instanceof HomeTypeHolder) {
|
final HomeType homeType = (HomeType) contentList.get(p);
|
|
final HomeTypeHolder holder = (HomeTypeHolder) viewHolder;
|
if (homeType == null) {
|
holder.view.setVisibility(View.GONE);
|
return;
|
}
|
if (homeType.getVideoInfoList() == null) {
|
homeType.setVideoInfoList(new ArrayList<>());
|
}
|
|
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
holder.view.setLayoutParams(params);
|
//是否为广告
|
if (homeType.getAd() != null) {
|
holder.fl_ad.setVisibility(View.VISIBLE);
|
holder.fl_content.setVisibility(View.GONE);
|
holder.rl_ad.setRatio(homeType.getAd().getPictureRate().floatValue());
|
try {
|
Glide.with(mContext).load(homeType.getAd().getPicture()).transition(withCrossFade())
|
.apply(new RequestOptions().placeholder(R.drawable.shape_default_cover).error(R.drawable.shape_default_cover))
|
.into(new DrawableImageViewTarget(holder.iv_ad, true));
|
} catch (IllegalArgumentException e) {
|
e.printStackTrace();
|
}
|
|
holder.view.setOnClickListener(new OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
|
JumpActivityUtil.jumpPage(mContext, homeType.getAd().getJumpDetail(), homeType.getAd().getParams() != null ? JSONObject.parseObject(homeType.getAd().getParams().replace(
|
"\\" + "\"", "\"")) : null);
|
}
|
});
|
|
return;
|
}
|
|
holder.fl_ad.setVisibility(View.GONE);
|
holder.fl_content.setVisibility(View.VISIBLE);
|
|
|
homeType.getVideoInfoList().clear();
|
int bigPictureIndex = -1;
|
if (homeType.getHomeVideoList() != null)
|
for (int j = 0; j < homeType.getHomeVideoList().size(); j++) {
|
if (homeType.getHomeVideoList().get(j).isBigPicture())
|
bigPictureIndex = j;
|
homeType.getVideoInfoList().add(homeType.getHomeVideoList().get(j).getVideo());
|
}
|
|
holder.view.setVisibility(View.VISIBLE);
|
|
VideoRecommendAdapter adapter = null;
|
|
holder.rv_content.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
|
|
if (homeType.getColumns() > 3) {//第一排为小视频
|
adapter = new VideoRecommendAdapter(mContext, mContext, homeType.getVideoInfoList(), homeType.isNeedAd(), Integer.MAX_VALUE, "recommend", homeType.getName(), null, new ExpressAdManager.IAdShowListener() {
|
@Override
|
public void show() {
|
holder.rv_content.scrollToPosition(0);
|
}
|
});
|
adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content);
|
} else {
|
adapter = new VideoRecommendAdapter(mContext, mContext, homeType.getVideoInfoList(), homeType.isNeedAd(), homeType.getColumns(), "recommend", homeType.getName(), null);
|
if (homeType.getColumns() == 2)
|
adapter.initRecyclerViewDisplayWidthColumn2(holder.rv_content, bigPictureIndex);
|
else if (homeType.getColumns() == 3)
|
adapter.initRecyclerViewDisplayWidthColumn3(holder.rv_content);
|
else
|
adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content);
|
}
|
if (homeType.getVideoInfoList() != null && homeType.getVideoInfoList().size() > 0) {
|
holder.rv_content.setAdapter(adapter);
|
}
|
|
|
holder.tv_category_name.setText(homeType.getName());
|
|
|
//更多
|
if (Boolean.parseBoolean(homeType.getHasMore())) {
|
holder.tv_more.setVisibility(View.VISIBLE);
|
if (!StringUtils.isEmpty(homeType.getMoreTag())) {
|
holder.tv_more.setText(homeType.getMoreTag());
|
} else {
|
holder.tv_more.setText("更多" + homeType.getName());
|
}
|
} else {
|
holder.tv_more.setVisibility(View.GONE);
|
}
|
|
int refreshP = homeType.getRefreshPosition();
|
//右上角且有更多选项
|
if (refreshP == 1 && Boolean.parseBoolean(homeType.getHasMore())) {
|
refreshP = 2;//移动至下方
|
}
|
|
//不足一页不显示刷新
|
if (homeType.getCount() <= homeType.getPageSize()) {
|
refreshP = 0;
|
}
|
|
|
switch (refreshP) {
|
case 0:
|
holder.tv_refresh.setVisibility(View.GONE);
|
holder.tv_tag_refresh.setVisibility(View.GONE);
|
break;
|
|
case 1:
|
holder.tv_refresh.setVisibility(View.GONE);
|
holder.tv_tag_refresh.setVisibility(View.VISIBLE);
|
break;
|
|
case 2:
|
holder.tv_refresh.setVisibility(View.VISIBLE);
|
holder.tv_tag_refresh.setVisibility(View.GONE);
|
break;
|
}
|
//刷新的动作
|
View.OnClickListener refreshListener = new View.OnClickListener() {
|
|
|
@Override
|
public void onClick(View v) {
|
BeibeiVideoAPI.getHomeVideoList(mContext, homeType.getId(), homeType.getCurrentPage() + 1, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, org.json.JSONObject jsonObject) throws Exception {
|
if (jsonObject.optBoolean("IsPost")) {
|
org.json.JSONObject data = jsonObject.optJSONObject("Data");
|
int page = data.optInt("page");
|
homeType.setCurrentPage(page);
|
//解析数据
|
homeType.getHomeVideoList().clear();
|
//解析HomeVideo数据
|
int count = data.optInt("count");
|
homeType.setCount(count);
|
|
JSONArray homeArray = data
|
.optJSONArray("list");
|
List<HomeVideo> homeList = new ArrayList<>();
|
if (homeArray != null && homeArray.length() > 0) {
|
for (int j = 0; j < homeArray.length(); j++) {
|
homeList.add(gson.fromJson(homeArray
|
.optJSONObject(j).toString(),
|
HomeVideo.class));
|
}
|
}
|
|
homeType.getHomeVideoList().clear();
|
homeType.getHomeVideoList().addAll(homeList);
|
//改变当前选项
|
notifyItemChanged(i);
|
}
|
}
|
});
|
|
|
}
|
};
|
holder.tv_refresh.setOnClickListener(refreshListener);
|
holder.tv_tag_refresh.setOnClickListener(refreshListener);
|
|
|
holder.tv_more
|
.setOnClickListener(new OnClickListener() {
|
|
@Override
|
public void onClick(View v) {
|
Intent intent = null;
|
if (homeType.getId().equalsIgnoreCase("1111")) {
|
intent = new Intent(v.getContext(),
|
VideosLiveActivity.class);
|
intent.putExtra("home_type", homeType.getId());
|
intent.putExtra("title", homeType.getName());
|
v.getContext().startActivity(intent);
|
} else if (homeType.getId().equalsIgnoreCase("9998")) {
|
intent = new Intent(v.getContext(), StarsActivity.class);
|
v.getContext().startActivity(intent);
|
} else {
|
Gson gson = new GsonBuilder()
|
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
|
.create();
|
VideoType type = gson.fromJson(homeType.getParams().replace(
|
"\\" + "\"", "\""), VideoType.class);
|
try {
|
intent = new Intent(v.getContext(), Class.forName(homeType.getActivity()));
|
intent.putExtra("video_type", type);
|
intent.putExtra("type_name", type.getName());
|
intent.putExtra("isPush", false);
|
v.getContext().startActivity(intent);
|
} catch (ClassNotFoundException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
});
|
|
|
} else if (viewHolder instanceof AdHolder) {
|
final AdHolder holder = (AdHolder) viewHolder;
|
holder.fl_ad.removeAllViews();
|
final ExpressAdContainer ad = (ExpressAdContainer) contentList.get(p);
|
if (ad != null) {
|
holder.ll_container.setVisibility(View.VISIBLE);
|
ExpressAdManager.fillAd(ad, holder.fl_ad);
|
} else {
|
holder.ll_container.setVisibility(View.GONE);
|
}
|
}
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = this.contentList.size();
|
if (headerView != null)
|
count++;
|
return count;
|
}
|
|
/**
|
* banner第一栏,视频内容第二栏,广告第三栏和最后一栏
|
*
|
* @param position
|
* @return
|
*/
|
//获取类型
|
@Override
|
public int getItemViewType(int position) {
|
if (position == 0) {
|
if (headerView != null)
|
return TYPE_HEADER;
|
}
|
|
if (headerView != null)
|
position--;
|
if (contentList.get(position) instanceof HomeType)
|
return RecommendContent.TYPE_HOMETYPE;
|
else
|
return RecommendContent.TYPE_AD;
|
}
|
|
class HomeTypeHolder extends RecyclerView.ViewHolder {
|
LinearLayout fl_content;
|
FrameLayout fl_ad;
|
RatioLayout rl_ad;
|
TextView tv_category_name;
|
ImageView iv_ad;
|
TextView tv_more;
|
RecyclerView rv_content;
|
RelativeLayout rl_title_item;
|
TextView tv_refresh;
|
TextView tv_tag_refresh;
|
View view;
|
|
public HomeTypeHolder(View convertView, RecyclerView.RecycledViewPool recycledViewPool) {
|
super(convertView);
|
this.view = convertView;
|
rl_title_item = convertView
|
.findViewById(R.id.rl_title_item);
|
|
fl_content = convertView
|
.findViewById(R.id.fl_content);
|
|
fl_ad = convertView
|
.findViewById(R.id.fl_ad);
|
|
iv_ad = convertView
|
.findViewById(R.id.iv_ad);
|
|
rl_ad = convertView
|
.findViewById(R.id.rl_ad);
|
|
|
tv_category_name = convertView
|
.findViewById(R.id.tv_category_name);
|
tv_more = convertView
|
.findViewById(R.id.tv_more);
|
rv_content = convertView
|
.findViewById(R.id.rv_content);
|
|
tv_refresh = convertView
|
.findViewById(R.id.tv_refresh);
|
|
tv_tag_refresh = convertView
|
.findViewById(R.id.tv_tag_refresh);
|
|
|
if (recycledViewPool != null)
|
rv_content.setRecycledViewPool(recycledViewPool);
|
}
|
}
|
|
class AdHolder extends RecyclerView.ViewHolder {
|
|
FrameLayout fl_ad;
|
RelativeLayout rl_title_item;
|
LinearLayout ll_container;
|
|
|
public AdHolder(View view) {
|
super(view);
|
ll_container = view.findViewById(R.id.ll_container);
|
fl_ad = view.findViewById(R.id.fl_ad);
|
rl_title_item = view.findViewById(R.id.rl_title_item);
|
}
|
|
}
|
|
}
|