package com.codeest.geeknews.ui.zhihu.adapter; import android.content.Context; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; import android.text.style.ForegroundColorSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.codeest.geeknews.R; import com.codeest.geeknews.component.ImageLoader; import com.codeest.geeknews.model.bean.CommentBean; import com.codeest.geeknews.util.DateUtil; import com.codeest.geeknews.widget.CircleImageView; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by codeest on 16/8/19. */ public class CommentAdapter extends RecyclerView.Adapter<CommentAdapter.ViewHolder>{ private LayoutInflater inflater; private List<CommentBean.CommentsBean> mList; private Context mContext; private static final int STATE_NULL = 0; //未知 private static final int STATE_NONE = 1; //无需展开 private static final int STATE_EXPAND = 2; //已展开 private static final int STATE_SHRINK = 3; //已收缩 private static final int MAX_LINE = 2; //起始最多显示2行 public CommentAdapter(Context mContext,List<CommentBean.CommentsBean> mList) { this.mList = mList; this.mContext = mContext; inflater = LayoutInflater.from(mContext); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(inflater.inflate(R.layout.item_comment,parent,false)); } @Override public void onBindViewHolder(final ViewHolder holder, int position) { CommentBean.CommentsBean info = mList.get(position); ImageLoader.load(mContext,info.getAvatar(),holder.civFace); holder.tvName.setText(info.getAuthor()); holder.tvContent.setText(info.getContent()); holder.tvTime.setText(DateUtil.formatTime2String(info.getTime())); holder.tvLike.setText(String.valueOf(info.getLikes())); if (info.getReply_to() != null && info.getReply_to().getId() != 0) { holder.tvReply.setVisibility(View.VISIBLE); SpannableString ss = new SpannableString("@" + info.getReply_to().getAuthor() + ": " + info.getReply_to().getContent()); ss.setSpan(new ForegroundColorSpan(ContextCompat.getColor(mContext,R.color.comment_at)), 0,info.getReply_to().getAuthor().length() + 2 , Spanned.SPAN_INCLUSIVE_INCLUSIVE); // holder.tvReply.setText(String.format("@%s: %s",info.getReply_to().getAuthor(),info.getReply_to().getContent())); holder.tvReply.setText(ss); if (info.getReply_to().getExpandState() == STATE_NULL) { //未知 holder.tvReply.post(new Runnable() { @Override public void run() { if (holder.tvReply.getLineCount() > MAX_LINE) { holder.tvReply.setMaxLines(MAX_LINE); holder.tvExpand.setVisibility(View.VISIBLE); holder.tvExpand.setText("展开"); mList.get(holder.getAdapterPosition()).getReply_to().setExpandState(STATE_SHRINK); holder.tvExpand.setOnClickListener(new OnStateClickListener(holder.getAdapterPosition(), holder.tvReply)); } else { holder.tvExpand.setVisibility(View.GONE); mList.get(holder.getAdapterPosition()).getReply_to().setExpandState(STATE_NONE); } } }); } else if(info.getReply_to().getExpandState() == STATE_NONE) { //无需展开 holder.tvExpand.setVisibility(View.GONE); } else if(info.getReply_to().getExpandState() == STATE_EXPAND) { //已展开 holder.tvReply.setMaxLines(Integer.MAX_VALUE); holder.tvExpand.setText("收起"); holder.tvExpand.setVisibility(View.VISIBLE); holder.tvExpand.setOnClickListener(new OnStateClickListener(holder.getAdapterPosition(), holder.tvReply)); } else { //已收缩 holder.tvReply.setMaxLines(MAX_LINE); holder.tvExpand.setText("展开"); holder.tvExpand.setVisibility(View.VISIBLE); holder.tvExpand.setOnClickListener(new OnStateClickListener(holder.getAdapterPosition(), holder.tvReply)); } } else { holder.tvReply.setVisibility(View.GONE); holder.tvExpand.setVisibility(View.GONE); } } @Override public int getItemCount() { return mList.size(); } private class OnStateClickListener implements View.OnClickListener { TextView replyView; int position; public OnStateClickListener(int position,TextView replyView) { this.position = position; this.replyView = replyView; } @Override public void onClick(View view) { TextView tv = (TextView) view; if (mList.get(position).getReply_to().getExpandState() == STATE_SHRINK) { tv.setText("收起"); replyView.setMaxLines(Integer.MAX_VALUE); replyView.setEllipsize(null); mList.get(position).getReply_to().setExpandState(STATE_EXPAND); } else { tv.setText("展开"); replyView.setMaxLines(MAX_LINE); replyView.setEllipsize(TextUtils.TruncateAt.END); mList.get(position).getReply_to().setExpandState(STATE_SHRINK); } } } public static class ViewHolder extends RecyclerView.ViewHolder{ @BindView(R.id.civ_comment_face) CircleImageView civFace; @BindView(R.id.tv_comment_name) TextView tvName; @BindView(R.id.tv_comment_content) TextView tvContent; @BindView(R.id.tv_comment_time) TextView tvTime; @BindView(R.id.tv_comment_expand) TextView tvExpand; @BindView(R.id.tv_comment_like) TextView tvLike; @BindView(R.id.tv_comment_reply) TextView tvReply; public ViewHolder(View itemView) { super(itemView); ButterKnife.bind(this,itemView); } } }