|
package com.electric.chargingpile.adapter;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.support.constraint.ConstraintLayout;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.aspsine.irecyclerview.IViewHolder;
import com.electric.chargingpile.R;
import com.electric.chargingpile.application.MainApplication;
import com.electric.chargingpile.data.ChatRecommendBean;
import com.electric.chargingpile.data.TopicHomePageBean;
import com.electric.chargingpile.data.TopicDetailBeanLab;
import com.electric.chargingpile.iview.RecyclerItemTypeClickListener;
import com.electric.chargingpile.util.CircleTransform;
import com.electric.chargingpile.util.CommonParams;
import com.electric.chargingpile.util.DensityUtil;
import com.electric.chargingpile.util.ImageDisplayUtils;
import com.electric.chargingpile.util.JsonUtils;
import com.electric.chargingpile.util.ScreenUtils;
import com.electric.chargingpile.util.ToastUtil;
import com.electric.chargingpile.view.SortTopicPopWindow;
import com.squareup.picasso.Picasso;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.StringCallback;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import okhttp3.Call;
public class TopicDetailAdapter extends RecyclerView.Adapter<IViewHolder> {
private static final String TAG = "TopicDetailAdapter";
public static final int TOPIC_DETAIL_HEADER = 1;
public static final int TOPIC_DETAIL_CONTENT = 2;
public static final int TOPIC_DETAIL_FOOTER = 3;
private int sort = 1;
private Context context;
private Activity activity;
private LayoutInflater layoutInflater;
private final TopicDetailBeanLab beanLab;
private TopicHomePageBean.TopicVo topicVo;
private RecyclerItemTypeClickListener onRecyclerItemClickListener;
private ChooseTopicSortInterface chooseTopicSortInterface;
private final int screenWidth;
private final int screenHeight;
private final int statusHeight;
private final int headerHeight;
private int itemWidth;
private boolean showFooter = false;
public TopicDetailAdapter(Context context, Activity activity) {
this.context = context;
this.activity = activity;
this.layoutInflater = LayoutInflater.from(context);
beanLab = TopicDetailBeanLab.get(context);
screenWidth = ScreenUtils.getScreenWidth(context);
screenHeight = ScreenUtils.getScreenHeight(context);
statusHeight = ScreenUtils.getStatusHeight(context);
headerHeight = DensityUtil.dip2px(context, 260);
itemWidth = (screenWidth - DensityUtil.dip2px(context, 10 * 2)) / 2;
}
@Override
public IViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = null;
IViewHolder viewHolder = null;
switch (viewType) {
case TOPIC_DETAIL_HEADER:
itemView = layoutInflater.inflate(R.layout.activity_topic_detail_header, parent, false);
viewHolder = new HeaderViewHolder(itemView);
break;
case TOPIC_DETAIL_CONTENT:
itemView = layoutInflater.inflate(R.layout.activity_chat_content, parent, false);
viewHolder = new ContentViewHolder(itemView);
break;
case TOPIC_DETAIL_FOOTER:
itemView = layoutInflater.inflate(R.layout.activity_chat_footer, parent, false);
viewHolder = new FooterViewHolder(itemView);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(IViewHolder viewHolder, int position) {
switch (getItemViewType(position)) {
case TOPIC_DETAIL_HEADER:
bindHeaderViewHolder(viewHolder, position);
break;
case TOPIC_DETAIL_CONTENT:
bindContentViewHolder(viewHolder, position);
break;
case TOPIC_DETAIL_FOOTER:
bindFooterViewHolder(viewHolder, position);
break;
}
}
@Override
public int getItemCount() {
return beanLab.beans().size() + 1 + 1;
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return TOPIC_DETAIL_HEADER;
} else if (position == getItemCount() - 1) {
return TOPIC_DETAIL_FOOTER;
} else {
return TOPIC_DETAIL_CONTENT;
}
}
private void bindHeaderViewHolder(IViewHolder viewHolder, int position) {
final HeaderViewHolder headerViewHolder = (HeaderViewHolder) viewHolder;
StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) headerViewHolder.topicDetailHeader.getLayoutParams();
params.setFullSpan(true);
if (topicVo == null) {
return;
}
ImageDisplayUtils.dispalyImg(context, topicVo.coverImgUrl, headerViewHolder.headImage);
headerViewHolder.name.setText(topicVo.name);
headerViewHolder.desc.setText(topicVo.desc);
headerViewHolder.read.setText(topicVo.visitNums);
headerViewHolder.join.setText(topicVo.joinNums);
headerViewHolder.sortConstrainLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final SortTopicPopWindow sortPopWindow = new SortTopicPopWindow(activity);
sortPopWindow.setUi(sort);
sortPopWindow.showPopupWindow(headerViewHolder.sortConstrainLayout, new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_1:
sort = 1;
sortPopWindow.dismiss();
headerViewHolder.sortTextView.setText("最新发布");
headerViewHolder.chooseTopicSort(sort);
break;
case R.id.tv_2:
sort = 2;
sortPopWindow.dismiss();
headerViewHolder.sortTextView.setText("最后回复");
headerViewHolder.chooseTopicSort(sort);
break;
case R.id.tv_3:
sort = 3;
sortPopWindow.dismiss();
headerViewHolder.sortTextView.setText("最热");
headerViewHolder.chooseTopicSort(sort);
break;
}
}
});
}
});
}
private void bindContentViewHolder(IViewHolder viewHolder, final int position) {
List<ChatRecommendBean> beans = TopicDetailBeanLab.get(context).beans();
if (beans.size() == 0 || position > beans.size()) {
return;
}
final ChatRecommendBean bean = beans.get(position - 1);
ContentViewHolder contentViewHolder = (ContentViewHolder) viewHolder;
ConstraintLayout.LayoutParams coverImageParams = (ConstraintLayout.LayoutParams) contentViewHolder.coverImage.getLayoutParams();
coverImageParams.width = itemWidth;
if (bean.coverImgW == 0 || bean.coverImgH == 0) {
coverImageParams.height = (int) (itemWidth * 16f / 9f);
} else {
if ((float) bean.coverImgH / bean.coverImgW > 16f / 9f) {
coverImageParams.height = (int) (itemWidth * 16f / 9f);
} else {
coverImageParams.height = (int) ((float) itemWidth * bean.coverImgH / bean.coverImgW);
}
}
contentViewHolder.coverImage.setLayoutParams(coverImageParams);
ImageDisplayUtils.dispalyImg(context, bean.coverImgUrl, contentViewHolder.coverImage);
contentViewHolder.videoIcon.setVisibility(bean.targetType == ChatRecommendBean.TARGET_TYPE_VIDEO ? View.VISIBLE : View.GONE);
contentViewHolder.isTop.setVisibility(bean.isTop == 1 ? View.VISIBLE : View.GONE);
contentViewHolder.title.setText(bean.title);
contentViewHolder.authorInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showAuthorInfo(position);
}
});
if (TextUtils.isEmpty(bean.headImgUrl)) {
Picasso.with(context)
.load(R.drawable.icon_face2_0)
.placeholder(R.drawable.icon_face2_0)
.error(R.drawable.icon_face2_0)
.transform(new CircleTransform())
.into(contentViewHolder.headImage);
} else {
Picasso.with(context)
.load("http://cdz.evcharge.cc/zhannew/uploadfile/" + bean.headImgUrl)
.placeholder(R.drawable.icon_face2_0)
.error(R.drawable.icon_face2_0)
.transform(new CircleTransform())
.into(contentViewHolder.headImage);
}
contentViewHolder.nickName.setText(bean.nickName);
contentViewHolder.likeInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (bean.likeFlg == 0) {
doLike(position);
}
}
});
if (bean.likeFlg == 1) {
contentViewHolder.likeIcon.setBackgroundResource(R.drawable.app_talk_main_list_zan_red_icon);
} else {
contentViewHolder.likeIcon.setBackgroundResource(R.drawable.app_talk_main_list_zan_icon);
}
int likeNum = bean.likeNums;
if (likeNum > 0) {
contentViewHolder.likeNum.setVisibility(View.VISIBLE);
contentViewHolder.likeNum.setText(likeNum < 999 ? likeNum + "" : "999+");
} else {
contentViewHolder.likeNum.setVisibility(View.GONE);
}
}
/**
* 点赞操作
*
* @param position
*/
private void doLike(final int position) {
final ChatRecommendBean bean = TopicDetailBeanLab.get(context).beans().get(position - 1);
String url = MainApplication.urlNew + "/topic/like.do";
Map<String, String> map = new HashMap<>();
map.put("targetId", bean.targetId + "");
map.put("targetType", bean.targetType + "");
map.put("flag", "1");
map.put("authorId", bean.addUserId + "");
CommonParams.addCommonParams(map);
OkHttpUtils.get().url(url).params(map).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
@Override
public void onError(Call call, Exception e) {
ToastUtil.showToast(context, "点赞失败,请重试", Toast.LENGTH_SHORT);
}
@Override
public void onResponse(String res) {
String code = JsonUtils.getKeyResult(res, "code");
String desc = JsonUtils.getKeyResult(res, "desc");
if ("1000".equals(code)) {
bean.likeFlg = 1;
bean.likeNums += 1;
notifyItemChanged(position);
} else {
ToastUtil.showToast(context, desc, Toast.LENGTH_SHORT);
}
}
});
}
private void bindFooterViewHolder(IViewHolder viewHolder, final int position) {
FooterViewHolder footerViewHolder = (FooterViewHolder) viewHolder;
StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) footerViewHolder.footerContainer.getLayoutParams();
layoutParams.setFullSpan(true);
footerViewHolder.footerContainer.setVisibility(showFooter ? View.VISIBLE : View.GONE);
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) footerViewHolder.footerView.getLayoutParams();
if (TopicDetailBeanLab.get(context).beans().size() == 0) {
footerViewHolder.footTextView.setText("还没有任何内容哦,快来抢沙发~");
params.height = DensityUtil.dip2px(context, (screenHeight - headerHeight - statusHeight) / 4);
params.bottomMargin = 0;
} else {
footerViewHolder.footTextView.setText("已经全部加载完毕");
params.height = DensityUtil.dip2px(context, 20);
params.bottomMargin = DensityUtil.dip2px(context, 10);
}
if (showFooter == false) {
params.height = 0;
params.bottomMargin = DensityUtil.dip2px(context, 10);
}
footerViewHolder.footTextView.setLayoutParams(params);
}
private void showAuthorInfo(int position) {
// TODO
}
public void setContentData(ArrayList<ChatRecommendBean> beans) {
beanLab.clear();
beanLab.add(beans);
notifyDataSetChanged();
}
public void addContentData(ArrayList<ChatRecommendBean> beans) {
int startSize = beanLab.beans().size();
beanLab.add(beans);
notifyItemRangeChanged(startSize, beans.size());
}
public void setHeaderData(TopicHomePageBean.TopicVo bean) {
topicVo = bean;
}
public void setFooterData(Boolean showFooter) {
this.showFooter = showFooter;
notifyItemRangeChanged(getItemCount() - 1, 1);
}
class HeaderViewHolder extends IViewHolder {
ConstraintLayout topicDetailHeader;
ImageView headImage;
TextView name;
TextView desc;
TextView read;
TextView join;
ConstraintLayout sortConstrainLayout;
TextView sortTextView;
ImageView sortCursor;
public HeaderViewHolder(View itemView) {
super(itemView);
topicDetailHeader = itemView.findViewById(R.id.topicDetailHeader);
headImage = itemView.findViewById(R.id.headImage);
name = itemView.findViewById(R.id.name);
desc = itemView.findViewById(R.id.desc);
read = itemView.findViewById(R.id.read);
join = itemView.findViewById(R.id.join);
sortConstrainLayout = itemView.findViewById(R.id.sortConstrainLayout);
sortTextView = itemView.findViewById(R.id.sortTextView);
sortCursor = itemView.findViewById(R.id.sortCursor);
}
public void chooseTopicSort(int sort) {
if (chooseTopicSortInterface != null) {
chooseTopicSortInterface.chooseTopicSort(sort);
}
}
}
public static class ContentViewHolder extends IViewHolder {
ConstraintLayout image_video_item;
ImageView coverImage;
ImageView videoIcon;
TextView isTop;
TextView title;
ConstraintLayout authorInfo;
ImageView headImage;
TextView nickName;
ConstraintLayout likeInfo;
ImageView likeIcon;
TextView likeNum;
ConstraintLayout topic_item;
ImageView topicCoverImage;
TextView topicTitle;
public ContentViewHolder(View itemView) {
super(itemView);
image_video_item = itemView.findViewById(R.id.image_video_item);
coverImage = itemView.findViewById(R.id.coverImage);
videoIcon = itemView.findViewById(R.id.videoIcon);
isTop = itemView.findViewById(R.id.isTop);
title = itemView.findViewById(R.id.title);
authorInfo = itemView.findViewById(R.id.authorInfo);
headImage = itemView.findViewById(R.id.headImage);
nickName = itemView.findViewById(R.id.nickName);
likeInfo = itemView.findViewById(R.id.likeInfo);
likeIcon = itemView.findViewById(R.id.likeIcon);
likeNum = itemView.findViewById(R.id.likeNum);
// 默认是隐藏的,只有在首页信息流里面插入的话题才会显示
topic_item = itemView.findViewById(R.id.topic_item);
topicCoverImage = itemView.findViewById(R.id.topicCoverImage);
topicTitle = itemView.findViewById(R.id.topicTitle);
}
}
public static class FooterViewHolder extends IViewHolder {
ConstraintLayout footerContainer;
ConstraintLayout footerView;
TextView footTextView;
public FooterViewHolder(View itemView) {
super(itemView);
footerContainer = itemView.findViewById(R.id.footerContainer);
footerView = itemView.findViewById(R.id.footerView);
footTextView = itemView.findViewById(R.id.footTextView);
}
}
public static class ContentViewDecoration extends RecyclerView.ItemDecoration {
private StaggeredGridLayoutManager.LayoutParams layoutParams;
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
int position = parent.getChildAdapterPosition(view);
if (position > 0) {
if (layoutParams.getSpanIndex() % 2 == 0) {
outRect.left = DensityUtil.dip2px(view.getContext(), 15);
outRect.right = DensityUtil.dip2px(view.getContext(), 5);
} else {
outRect.right = DensityUtil.dip2px(view.getContext(), 15);
outRect.left = DensityUtil.dip2px(view.getContext(), 5);
}
}
}
}
public void setOnRecyclerItemClickListener(RecyclerItemTypeClickListener onRecyclerItemClickListener) {
this.onRecyclerItemClickListener = onRecyclerItemClickListener;
}
public interface ChooseTopicSortInterface {
void chooseTopicSort(int sort);
}
public void setChooseTopicSortInterface(ChooseTopicSortInterface chooseTopicSortInterface) {
this.chooseTopicSortInterface = chooseTopicSortInterface;
}
}
|