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