充电桩app代码

TopicDetailAdapter.java 18KB

    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; } }