package com.jaydenxiao.androidfire.ui.zone.viewholder; import android.app.Activity; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewStub; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.jaydenxiao.androidfire.R; import com.jaydenxiao.androidfire.ui.zone.DatasUtil; import com.jaydenxiao.androidfire.ui.zone.adapter.CircleAdapter; import com.jaydenxiao.androidfire.ui.zone.adapter.CommentAdapter; import com.jaydenxiao.androidfire.ui.zone.adapter.FavortListAdapter; import com.jaydenxiao.androidfire.ui.zone.bean.CircleItem; import com.jaydenxiao.androidfire.ui.zone.bean.CommentConfig; import com.jaydenxiao.androidfire.ui.zone.bean.CommentItem; import com.jaydenxiao.androidfire.ui.zone.bean.FavortItem; import com.jaydenxiao.androidfire.ui.zone.presenter.CircleZonePresenter; import com.jaydenxiao.androidfire.ui.zone.spannable.ISpanClick; import com.jaydenxiao.androidfire.ui.zone.widget.CommentDialog; import com.jaydenxiao.androidfire.ui.zone.widget.CommentListView; import com.jaydenxiao.androidfire.ui.zone.widget.ExpandableTextView; import com.jaydenxiao.androidfire.ui.zone.widget.FavortListView; import com.jaydenxiao.androidfire.ui.zone.widget.MultiImageView; import com.jaydenxiao.common.baseapp.AppCache; import com.jaydenxiao.common.commonutils.ImageLoaderUtils; import com.jaydenxiao.common.commonutils.TimeUtil; import com.jaydenxiao.common.commonutils.ToastUitl; import com.jaydenxiao.common.imagePager.BigImagePagerActivity; import java.util.List; /** * des:圈子viewholder * Created by xsf * on 2016.08.14:27 */ public class ZoneViewHolder extends RecyclerView.ViewHolder { private Context mContext; private int type; private View itemView; private CircleZonePresenter mPresenter; private CircleItem circleItem; private int position; public ImageView headIv; public TextView nameTv; public TextView urlTipTv; /** * 动态的内容 */ public ExpandableTextView contentTv; public TextView timeTv; public TextView tvAddressOrDistance; public TextView deleteBtn; public TextView favortBtn; public TextView snsBtn; public LinearLayout ll_comment; /** * 点赞列表 */ public FavortListView favortListTv; public LinearLayout urlBody; public LinearLayout digCommentBody; public View digLine; /** * 评论列表 */ public CommentListView commentList; /** * 链接的图片 */ public ImageView urlImageIv; /** * 链接的标题 */ public TextView urlContentTv; /** * 图片 */ public MultiImageView multiImageView; //至关重要一步,复用自定义适配器 public FavortListAdapter favortListAdapter; public CommentAdapter commentAdapter; public static ZoneViewHolder create(Context context, int type) { ZoneViewHolder imageViewHolder = new ZoneViewHolder(LayoutInflater.from(context).inflate(R.layout.item_circle_list, null), context,type ); return imageViewHolder; } public ZoneViewHolder(View itemView, final Context context, int type) { super(itemView); this.itemView=itemView; this.type=type; this.mContext = context; initView(); } /** * 初始化 */ private void initView() { ViewStub linkOrImgViewStub = (ViewStub) itemView.findViewById(R.id.linkOrImgViewStub); switch (type) { case CircleAdapter.ITEM_VIEW_TYPE_URL:// 链接view linkOrImgViewStub.setLayoutResource(R.layout.item_circle_viewstub_urlbody); linkOrImgViewStub.inflate(); LinearLayout urlBodyView = (LinearLayout) itemView.findViewById(R.id.urlBody); if (urlBodyView != null) { urlBody = urlBodyView; urlImageIv = (ImageView) itemView.findViewById(R.id.urlImageIv); urlContentTv = (TextView) itemView.findViewById(R.id.urlContentTv); } break; case CircleAdapter.ITEM_VIEW_TYPE_IMAGE:// 图文view default: linkOrImgViewStub.setLayoutResource(R.layout.item_circle_viewstub_imgbody); linkOrImgViewStub.inflate(); MultiImageView multiImageView = (MultiImageView) itemView.findViewById(R.id.multiImagView); if (multiImageView != null) { this.multiImageView = multiImageView; } break; } headIv = (ImageView) itemView.findViewById(R.id.headIv); nameTv = (TextView) itemView.findViewById(R.id.nameTv); digLine = itemView.findViewById(R.id.lin_dig); contentTv = (ExpandableTextView) itemView.findViewById(R.id.contentTv); urlTipTv = (TextView) itemView.findViewById(R.id.urlTipTv); timeTv = (TextView) itemView.findViewById(R.id.timeTv); tvAddressOrDistance = (TextView) itemView.findViewById(R.id.tv_address_or_distance); deleteBtn = (TextView) itemView.findViewById(R.id.deleteBtn); favortBtn = (TextView) itemView.findViewById(R.id.favortBtn); snsBtn = (TextView) itemView.findViewById(R.id.commentBtn); ll_comment = (LinearLayout) itemView.findViewById(R.id.ll_comment); favortListTv = (FavortListView) itemView.findViewById(R.id.favortListTv); digCommentBody = (LinearLayout) itemView.findViewById(R.id.digCommentBody); commentList = (CommentListView) itemView.findViewById(R.id.commentList); commentAdapter = new CommentAdapter(mContext); favortListAdapter = new FavortListAdapter(); favortListTv.setAdapter(favortListAdapter); commentList.setAdapter(commentAdapter); } /** * 设置数据 * @param circleItem2 * @param position2 */ public void setData(CircleZonePresenter mPresenter2, CircleItem circleItem2, final int position2){ if(mPresenter2==null||circleItem2==null){ return; } this.circleItem=circleItem2; this.mPresenter=mPresenter2; this.position=position2; final List<FavortItem> favortDatas = circleItem.getGoodjobs(); final List<CommentItem> commentsDatas = circleItem.getReplys(); boolean hasFavort = circleItem.getGoodjobs().size() > 0 ? true : false; boolean hasComment = circleItem.getReplys().size() > 0 ? true : false; //头像 ImageLoaderUtils.displayRound(mContext, headIv, DatasUtil.getRandomPhotoUrl()); nameTv.setText(circleItem.getNickName()); timeTv.setText(TimeUtil.getfriendlyTime(circleItem.getCreateTime())); contentTv.setText(circleItem.getContent(), position); //距离 tvAddressOrDistance.setText("广州 <7KM"); contentTv.setVisibility(TextUtils.isEmpty(circleItem.getContent()) ? View.GONE : View.VISIBLE); //是否显示删除图标 deleteBtn.setVisibility(AppCache.getInstance().getUserId().equals(circleItem.getUserId())?View.VISIBLE:View.GONE); deleteBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //删除 if (mPresenter != null) { mPresenter.deleteCircle(circleItem.getId(), position); } } }); //图片或链接显示 switch (type) { case CircleAdapter.ITEM_VIEW_TYPE_URL:// 处理链接动态的链接内容和和图片 String linkImg = circleItem.getLinkImg(); String linkTitle = circleItem.getLinkTitle(); ImageLoaderUtils.display(mContext, urlImageIv, linkImg); urlContentTv.setText(linkTitle); urlBody.setVisibility(View.VISIBLE); urlTipTv.setVisibility(View.VISIBLE); break; case CircleAdapter.ITEM_VIEW_TYPE_IMAGE:// 处理图片 default: final List<String> photos = circleItem.getPictureList(); if (photos != null && photos.size() > 0) { multiImageView.setVisibility(View.VISIBLE); multiImageView.setList(photos); multiImageView.setOnItemClickListener(new MultiImageView.OnItemClickListener() { @Override public void onItemClick(View view, int position) { // 查看大图 BigImagePagerActivity.startImagePagerActivity((Activity) mContext, photos, position); } }); } else { multiImageView.setVisibility(View.GONE); } break; } //点赞和评论 ll_comment.setVisibility(View.VISIBLE); if (hasFavort || hasComment) { //处理点赞列表 if (hasFavort) { favortListTv.setSpanClickListener(new ISpanClick() { @Override public void onClick(int position) { String userId = favortDatas.get(position).getUserId(); ToastUitl.showShort(userId); } }); favortListAdapter.setDatas(favortDatas); favortListAdapter.notifyDataSetChanged(); favortListTv.setVisibility(View.VISIBLE); //favortBtn.setText(String.valueOf(favortDatas.size())); } else { favortListTv.setVisibility(View.GONE); favortBtn.setText(""); } //处理评论列表 if (hasComment) { //点击评论 commentList.setOnItemClick(new CommentListView.OnItemClickListener() { @Override public void onItemClick(int commentPosition) { CommentItem commentItem = commentsDatas.get(commentPosition); if (AppCache.getInstance().getUserId().equals(commentItem.getUserId())) {//复制或者删除自己的评论 CommentDialog dialog = new CommentDialog(mContext, mPresenter, commentItem, position,commentPosition); dialog.show(); } else {//回复别人的评论 if (mPresenter != null) { CommentConfig config = new CommentConfig(); config.circlePosition = position; config.commentPosition = commentPosition; config.commentType = CommentConfig.Type.REPLY; config.setPublishId(circleItem.getId()); config.setPublishUserId(circleItem.getUserId());//动态人userid config.setId(commentItem.getUserId());//评论人userid config.setName(commentItem.getUserNickname());//评论人nickname mPresenter.showEditTextBody(config); } } } }); //长按评论 commentList.setOnItemLongClick(new CommentListView.OnItemLongClickListener() { @Override public void onItemLongClick(int commentPosition) { //长按进行复制或者删除 CommentItem commentItem = commentsDatas.get(commentPosition); CommentDialog dialog = new CommentDialog(mContext, mPresenter, commentItem, position,commentPosition); dialog.show(); } }); //snsBtn.setText(String.valueOf(commentsDatas.size())); commentAdapter.setDatas(commentsDatas); commentAdapter.notifyDataSetChanged(); commentList.setVisibility(View.VISIBLE); } else { snsBtn.setText(""); commentList.setVisibility(View.GONE); } } else { favortListTv.setVisibility(View.GONE); commentList.setVisibility(View.GONE); favortBtn.setText(""); snsBtn.setText(""); } digLine.setVisibility(hasFavort && hasComment ? View.VISIBLE : View.GONE); //评论 snsBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { comment(circleItem.getId(), circleItem.getUserId(), position); } }); ll_comment.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { comment(circleItem.getId(), circleItem.getUserId(), position); } }); //点赞 favortBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //判断是否已点赞 String curUserFavortId = circleItem.getCurUserFavortId(); if (!TextUtils.isEmpty(curUserFavortId)) { favort(circleItem.getId(), circleItem.getUserId(), position, "取消", view); } else { favort(circleItem.getId(), circleItem.getUserId(), position, "赞", view); } } }); //头像点击 headIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //跳到个人朋友圈 ToastUitl.showShort("头像点击了"+position); } }); urlTipTv.setVisibility(View.GONE); } /** * //点赞、取消点赞 */ private long mLasttime = 0; private void favort(String publishId, String publishUserId, int circlePosition, String mTitle, View view) { if (System.currentTimeMillis() - mLasttime < 700)//防止快速点击操作 return; mLasttime = System.currentTimeMillis(); if (mPresenter != null) { if ("赞".equals(mTitle)) { mPresenter.addFavort(publishId, publishUserId, circlePosition, view); } else {//取消点赞 mPresenter.deleteFavort(publishId, publishUserId, circlePosition); } } } /** * 评论 */ private void comment(String publishId, String publishUserId, int circlePosition) { if (mPresenter != null) { CommentConfig config = new CommentConfig(); config.circlePosition = circlePosition; config.commentType = CommentConfig.Type.PUBLIC; config.setPublishId(publishId); config.setPublishUserId(publishUserId); mPresenter.showEditTextBody(config); } } public View getRootView(){ return itemView.findViewById(R.id.ll_root); } public View getCommentListView(){ return commentList; } public int getHeight(){ if(itemView!=null){ return itemView.getMeasuredHeight(); } else{ return 0;} } }