RecyclerView的item多布局

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值