public class CircleContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final int CIRCLE_TOP = 0;//给一个常量去声明top的item对象 private final int CIRCLE_FIRST_ITEM = 1;//给一个常量去声明楼主的布局的item对象 private final int CIRCLE_SECOND_ITEM = 2;//给一个常量去声明回复的布局的item对象 private List<ReviewsBean> reviewsList;//回复部分数据集合 private TopicBean topicList;//楼主的数据集合 private Context mContext; private LayoutInflater layoutInflater; public CircleContentAdapter(Context mContext) { this.mContext = mContext;//设置上下文 layoutInflater = LayoutInflater.from(mContext);//设置布局管理器 } public void setTopicList(TopicBean topicList) { this.topicList = topicList; } public void setReviewsList(List<ReviewsBean> reviewsList) { this.reviewsList = reviewsList; } /*getItemViewType(int position):这个方法是制定适配器 显示当前position位置数据时,应该使用哪个视图;*/ @Override public int getItemViewType(int position) { /*当positon为0的时候,加载顶部视图,也就是circle_content_top_item * 当positon为1的时候,加载楼主的视图,也就是circle_content_first_item * 剩下的部分就加载回复楼层的视图了,是circle_content_second_item*/ if (position == 0) { return CIRCLE_TOP; } else if (position == 1) { return CIRCLE_FIRST_ITEM; } else { return CIRCLE_SECOND_ITEM; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { /*布局管理器通过条件的不同来选择绑定不同的item布局, 因为它的返回值是ViewHolder,绑定布局返回相应的ViewHolder*/ View view; if (viewType == CIRCLE_TOP) { /*当viewType是CIRCLE_TOP,也就是top的item的时候,绑定相对应的布局*/ view = layoutInflater.inflate(R.layout.circle_content_top_item, parent, false); return new TopViewHolder(view); } else if (viewType == CIRCLE_FIRST_ITEM) { /*当viewType是CIRCLE_FIRST_ITEM,也就是楼主的item时,绑定布局*/ view = layoutInflater.inflate(R.layout.circle_content_first_item, parent, false); return new FirstViewHolder(view); } else if (viewType == CIRCLE_SECOND_ITEM) { /*除去上面,剩下了CIRCLE_SECOND_ITEM,所以也绑定相应布局*/ view = layoutInflater.inflate(R.layout.circle_content_second_item, parent, false); return new SecondViewHolder(view); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { /*绑定数据*/ /*这个是顶部top的需要获取的数据,只需要获取外部传过来的话题名字和话题对应的url*/ if (holder instanceof TopViewHolder) { TopViewHolder viewHolder = (TopViewHolder) holder; viewHolder.topTitle.setText(topicList.getForum_name());//圈子名称 viewHolder.topTitleInfo.setText(topicList.getGuide_info());//副标题 } else if (holder instanceof FirstViewHolder) { FirstViewHolder viewHolder = (FirstViewHolder) holder; viewHolder.firstTitle.setText(topicList.getTitle());//帖子名字 viewHolder.firstUserName.setText(topicList.getPublisher().getScreen_name());//楼主名称 viewHolder.firstContent.setText(topicList.getContent());//发表的内容 viewHolder.firstReply.setText(topicList.getTotal_review() + "");//回复的数量 viewHolder.firstTime.setText(DateUtil.getIntervalTime(topicList.getReviewed_date()));//发帖时间 //Fresco使用需要序列化 Fresco.initialize(mContext); //用fresco加载图片 viewHolder.firstUserImg.setImageURI(topicList.getPublisher().getUser_avatar().getMedium()); //设置回复楼层里面嵌套的GridView部分 List<String> images = topicList.getImages();//得到相对应的图片地址的集合 viewHolder.firstGridView.setAdapter(new FirstGridViewAdapter(mContext, images)); } else if (holder instanceof SecondViewHolder) { SecondViewHolder viewHolder = (SecondViewHolder) holder; ReviewsBean reviewsBean = reviewsList.get(position - 2); viewHolder.secondUserName.setText(reviewsBean.getPublisher().getScreen_name());//回复楼层层主名称 viewHolder.secondContent.setText(reviewsBean.getContent());//回复内容 viewHolder.secondData.setText(DateUtil.getIntervalTime(reviewsBean.getUpdated_date()));//设置回复的时间 //Fresco使用需要序列化 Fresco.initialize(mContext); //用fresco加载图片 viewHolder.secondUserImg.setImageURI(reviewsBean.getPublisher().getUser_avatar().getMedium()); //通过判断position来判断楼层的名字 if (position == 2) { viewHolder.secondPosition.setText("沙发"); } else if (position == 3) { viewHolder.secondPosition.setText("板凳"); } else if (position > 3) { viewHolder.secondPosition.setText((position - 1) + "楼"); } //设置回复楼层里面的图片,接口数据有时候是空的,所以加个判断 if (reviewsBean.getImage() != null && reviewsBean.getImage().length() > 0) { String img = reviewsBean.getImage(); Picasso.with(mContext).load(img).into(viewHolder.secondImg); } viewHolder.secondLayout.setVisibility(View.GONE); //通过判断条件来决定是否添加布局的内容 if (reviewsBean.getReferences() != null && reviewsBean.getReferences().getPublisher()!=null) { viewHolder.secondLayout.setVisibility(View.VISIBLE); viewHolder.innerTime.setText(DateUtil.getIntervalTime(reviewsBean.getReferences().getUpdated_date()));//回复目标楼层的日期 viewHolder.innerPisition.setText(reviewsBean.getReferences().getFloor_no() + "楼");//回复目标楼层的楼层数 viewHolder.innerContent.setText(reviewsBean.getReferences().getContent());//回复目标楼层的内容 viewHolder.innerUserName.setText(reviewsBean.getReferences().getPublisher().getScreen_name());//回复目标楼层的层主名称 } } } /*这里+2的原因是:reviewsList是回复楼层的数据集合,剩下了top的位置和楼主的数据, 刚好是两个position的位置*/ @Override public int getItemCount() { return reviewsList != null ? reviewsList.size() + 2 : 0; } /*设置各个item的ViewHolder*/ /*这里是top的ViewHolder*/ class TopViewHolder extends RecyclerView.ViewHolder { private final TextView topTitleInfo; private final TextView topTitle; private final RelativeLayout topLayout; public TopViewHolder(View itemView) { super(itemView); topTitle = (TextView) itemView.findViewById(R.id.top_from_title); topTitleInfo = (TextView) itemView.findViewById(R.id.top_from_title_bottom); topLayout = (RelativeLayout) itemView.findViewById(R.id.top_from_layout); } } class FirstViewHolder extends RecyclerView.ViewHolder { private final TextView firstTitle; private final SimpleDraweeView firstUserImg; private final TextView firstUserName; private final TextView firstContent; private final TextView firstTime; private final MineTataGridView firstGridView; private final TextView firstReply; public FirstViewHolder(View itemView) { super(itemView); //帖子标题 firstTitle = (TextView) itemView.findViewById(R.id.content_first_item_title); //楼主头像 firstUserImg = (SimpleDraweeView) itemView.findViewById(R.id.content_first_item_user_img); //楼主名称 firstUserName = (TextView) itemView.findViewById(R.id.content_first_item_user_name); //帖子内容 firstContent = (TextView) itemView.findViewById(R.id.content_first_item_content); //发帖时间 firstTime = (TextView) itemView.findViewById(R.id.content_first_item_time); //图片的RecyclerView firstGridView = (MineTataGridView) itemView.findViewById(R.id.content_first_item_grid); //回复的数量 firstReply = (TextView) itemView.findViewById(R.id.content_first_item_reply); } } class SecondViewHolder extends RecyclerView.ViewHolder { private final SimpleDraweeView secondUserImg; private final TextView secondUserName; private final TextView secondPosition; private final TextView secondData; private final TextView secondContent; private final ImageView secondImg; private final LinearLayout secondLayout; private final TextView innerUserName; private final TextView innerTime; private final TextView innerPisition; private final TextView innerContent; public SecondViewHolder(View itemView) { super(itemView); //层主头像 secondUserImg = (SimpleDraweeView) itemView.findViewById(R.id.content_second_item_user_img); //层主名称 secondUserName = (TextView) itemView.findViewById(R.id.content_second_item_user_name); //楼层数量 secondPosition = (TextView) itemView.findViewById(R.id.content_second_item_position); //回复楼层的时间 secondData = (TextView) itemView.findViewById(R.id.content_second_item_date); //回复楼层的内容 secondContent = (TextView) itemView.findViewById(R.id.content_second_item_content); //回复楼层的图片的RecyclerView secondImg = (ImageView) itemView.findViewById(R.id.content_second_item_img); //楼层内回复的布局id secondLayout = (LinearLayout) itemView.findViewById(R.id.content_second_item_linear); //楼层内回复的对象的名称 innerUserName = (TextView) itemView.findViewById(R.id.content_second_item_inner_user_name); //楼层内回复的对象发言的时间 innerTime = (TextView) itemView.findViewById(R.id.content_second_item_inner_time); //楼层内回复的对象发言的楼层 innerPisition = (TextView) itemView.findViewById(R.id.content_second_item_inner_position); //楼层内回复的对象发言的内容 innerContent = (TextView) itemView.findViewById(R.id.content_second_item_inner_content); } } }
转载于:https://my.oschina.net/content/blog/849029