package me.yluo.ruisiapp.adapter; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; 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.squareup.picasso.Picasso; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.util.List; import me.yluo.ruisiapp.R; import me.yluo.ruisiapp.activity.UserDetailActivity; import me.yluo.ruisiapp.listener.ListItemClickListener; import me.yluo.ruisiapp.model.SingleArticleData; import me.yluo.ruisiapp.model.SingleType; import me.yluo.ruisiapp.utils.DimenUtils; import me.yluo.ruisiapp.utils.UrlUtils; import me.yluo.ruisiapp.widget.CircleImageView; import me.yluo.ruisiapp.widget.htmlview.HtmlView; /** * Created by yang on 16-3-7. * 单篇文章adapter * 评论 文章 loadmore */ public class PostAdapter extends BaseAdapter { private static final int CONTENT = 0; private static final int COMENT = 1; private static final int HEADER = 3; private int size = 0; //数据 private List<SingleArticleData> datalist; private Activity activity; public PostAdapter( Activity activity, ListItemClickListener itemListener, List<SingleArticleData> datalist) { this.datalist = datalist; this.activity = activity; size = DimenUtils.dip2px(activity, 42); setItemListener(itemListener); } @Override protected int getDataCount() { return datalist.size(); } @Override protected int getItemType(int pos) { if (datalist.get(pos).type == SingleType.CONTENT) { return CONTENT; } else if (datalist.get(pos).type == SingleType.HEADER) { return HEADER; } else { return COMENT; } } @Override protected BaseAdapter.BaseViewHolder getItemViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case CONTENT: return new ArticleContentViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_content, parent, false)); case HEADER: return new HeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_content_h, parent, false)); default: // TYPE_COMMENT return new CommentViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_comment, parent, false)); } } //文章内容 楼主ViewHolder private class ArticleContentViewHolder extends BaseViewHolder { CircleImageView userAvatar; TextView title, postTime, userName, content, btnMore; ArticleContentViewHolder(View itemView) { super(itemView); btnMore = itemView.findViewById(R.id.btn_more); title = itemView.findViewById(R.id.article_title); userAvatar = itemView.findViewById(R.id.article_user_image); userName = itemView.findViewById(R.id.article_username); postTime = itemView.findViewById(R.id.article_post_time); content = itemView.findViewById(R.id.content); userAvatar.setOnClickListener(v -> { if (datalist.get(0).uid > 0) { UserDetailActivity.openWithAnimation( activity, datalist.get(0).username, userAvatar, datalist.get(0).uid); } }); btnMore.setOnClickListener(this); } @Override void setData(int position) { final SingleArticleData single = datalist.get(position); title.setText(single.title); userName.setText(single.username); String imgUrl = UrlUtils.getAvaterurlm(single.getImg()); if (single.uid > 0) { Picasso.get() .load(imgUrl) .resize(size, size) .placeholder(R.drawable.image_placeholder) .error(R.drawable.image_placeholder) .into(userAvatar); } else { Picasso.get() .load(R.drawable.image_placeholder) .resize(size, size) .into(userAvatar); } String postTime = "发表于:" + single.postTime; this.postTime.setText(postTime); HtmlView.parseHtml(single.content).into(content); } } // 评论ViewHolder private class CommentViewHolder extends BaseViewHolder { ImageView avatar; TextView username, index, replyTime, comment, labelLz; View btnReplyCz, btnMore; CommentViewHolder(View itemView) { super(itemView); avatar = itemView.findViewById(R.id.article_user_image); btnReplyCz = itemView.findViewById(R.id.btn_reply_cz); btnMore = itemView.findViewById(R.id.btn_more); username = itemView.findViewById(R.id.replay_author); index = itemView.findViewById(R.id.replay_index); replyTime = itemView.findViewById(R.id.replay_time); comment = itemView.findViewById(R.id.html_text); labelLz = itemView.findViewById(R.id.bt_lable_lz); comment.setOnLongClickListener(view -> { String user = datalist.get(getAdapterPosition()).username; String content = comment.getText().toString().trim(); ClipboardManager cm = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE); if (cm != null) { cm.setPrimaryClip(ClipData.newPlainText(null, content)); Toast.makeText(activity, "已复制" + user + "的评论", Toast.LENGTH_SHORT).show(); } return true; }); avatar.setOnClickListener(v -> { if (datalist.get(getAdapterPosition()).uid > 0) { UserDetailActivity.openWithAnimation( activity, datalist.get(getAdapterPosition()).username, avatar, datalist.get(getAdapterPosition()).uid); } }); btnReplyCz.setOnClickListener(this); btnMore.setOnClickListener(this); } //设置listItem的数据 @Override void setData(int position) { final SingleArticleData single = datalist.get(position); username.setText(single.username); //判断是不是楼主 boolean isLz = datalist.get(position).username.equals(datalist.get(0).username); labelLz.setVisibility(isLz ? View.VISIBLE : View.GONE); boolean isReply = single.replyUrlTitle.contains("action=reply"); btnReplyCz.setVisibility(isReply ? View.VISIBLE : View.GONE); String imgUrl = UrlUtils.getAvaterurlm(single.getImg()); if (single.uid > 0) { Picasso.get() .load(imgUrl) .resize(size, size) .placeholder(R.drawable.image_placeholder) .error(R.drawable.image_placeholder) .into(avatar); } else { Picasso.get() .load(R.drawable.image_placeholder) .resize(size, size) .into(avatar); } replyTime.setText(single.postTime); index.setText(single.index); HtmlView.parseHtml(single.content).into(comment); } } public void copyItem(int position) { String user = datalist.get(position).username; Document document = Jsoup.parse(datalist.get(position).content); String content = document.text(); ClipboardManager cm = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE); if (cm != null) { cm.setPrimaryClip(ClipData.newPlainText(null, content)); Toast.makeText(activity, "已复制" + user + "的评论", Toast.LENGTH_SHORT).show(); } } //header private class HeaderViewHolder extends BaseViewHolder { HeaderViewHolder(View itemView) { super(itemView); } @Override void setData(int position) { } } }