RecyclerViewduo多条目抽基类展示

直接展示Adapter层,

//这里继承的是本类的RecyclerView.Adapter<RecyclerView.ViewHolder>
 public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private  static final int NUMBER_THREE=3;
    private  static final int NUMBER_TWO=2;
    private  static final int NUMBER_ONE=1;
    private List<NewsBean.ResultBean.DataBean> data;
    private MainActivity mainActivity;
    public NewsAdapter(MainActivity mainActivity) {
            this.mainActivity =mainActivity;
           data= new ArrayList<>();
    }

    public void setData(List<NewsBean.ResultBean.DataBean> data){
        this.data=data;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if(i==NUMBER_THREE){
            View inflate_three = View.inflate(mainActivity, R.layout.recycle_item_three, null);
            return new RecycleThree(inflate_three);
        }else if(i==NUMBER_TWO){
            View inflate_two = View.inflate(mainActivity, R.layout.recycle_item_twp, null);
            return new RecycleTwo(inflate_two);
        }else{
            View inflate_one = View.inflate(mainActivity, R.layout.recycle_item_one, null);
            return new RecycleOne(inflate_one);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

        //这里用到了代码的多态性,
        ((BaseAbstractViewHolder)viewHolder).onBindViewHolder(data.get(i),mainActivity);
    
        //不用抽取出去的话在本类里面配置就行,
        /*int itemViewType = viewHolder.getItemViewType();
        if(itemViewType==NUMBER_THREE){
            RecycleThree recycleThree = (RecycleThree) viewHolder;
            recycleThree.tv_three_title.setText(data.get(i).getAuthor_name());
            recycleThree.mTv_three_messages.setText(data.get(i).getTitle());
            Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s()).into(recycleThree.mIv_imageview_one);
            Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s02()).into(recycleThree.iv_imageview_two);
            Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s03()).into(recycleThree.iv_imageview_three);

        }else if(itemViewType==NUMBER_TWO){
            RecycleTwo recycleTwo = (RecycleTwo) viewHolder;
            recycleTwo.tv_two_title.setText(data.get(i).getAuthor_name());
            recycleTwo.tv_two_messages.setText(data.get(i).getTitle());
            Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s()).into(recycleTwo.iv_two_imageview_one);
            Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s02()).into(recycleTwo.iv_two_imageview_two);

        }else{
            RecycleOne recycleOne = (RecycleOne) viewHolder;
            recycleOne.tv_title.setText(data.get(i).getAuthor_name());
            recycleOne.tv_messages.setText(data.get(i).getTitle());
            Glide.with(mainActivity).load(data.get(i).getThumbnail_pic_s()).into(recycleOne.iv_imageview);
        }*/
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    //重写方法
    @Override
    public int getItemViewType(int position) {
    //获取接口里面的图片文件,getThumbnail_pic_s03()是接口里的图片,如果有03
    //那么就代表有3个图,如果有02哪就代表有两个,这东西都是接口里面给的。
        if((data.get(position).getThumbnail_pic_s03())!=null){
            Log.e("3",data.get(position).getThumbnail_pic_s03());
            return NUMBER_THREE;
        }else if((data.get(position).getThumbnail_pic_s02())!=null){
            Log.e("2",data.get(position).getThumbnail_pic_s02());
            return NUMBER_TWO;
        }else {
            Log.e("1",data.get(position).getThumbnail_pic_s());
            return NUMBER_ONE;
        }
    }
    //把这三个类抽取出去,让Adapter层看起来更精简
/*
     static class RecycleThree extends RecyclerView.ViewHolder {
        TextView mTv_three_messages;
        TextView tv_three_title;
        ImageView mIv_imageview_one;
        ImageView iv_imageview_two;
        ImageView iv_imageview_three;

        public RecycleThree(@NonNull View inflate) {
            super(inflate);
            mTv_three_messages = inflate.findViewById(R.id.tv_three_messages);
            tv_three_title = inflate.findViewById(R.id.tv_three_title);
            mIv_imageview_one = inflate.findViewById(R.id.iv_imageview_one);
            iv_imageview_two = inflate.findViewById(R.id.iv_imageview_two);
            iv_imageview_three = inflate.findViewById(R.id.iv_imageview_three);
        }

        }*/

  /* static  class RecycleOne extends RecyclerView.ViewHolder {

        TextView tv_messages;
        TextView tv_title;
        ImageView iv_imageview;


        public RecycleOne(@NonNull View inflate) {
            super(inflate);
            tv_messages = inflate.findViewById(R.id.tv_messages);
            tv_title = inflate.findViewById(R.id.tv_title);
            iv_imageview = inflate.findViewById(R.id.iv_imageview);
        }
    }*/

  /*static   class RecycleTwo extends RecyclerView.ViewHolder {
        TextView tv_two_messages;
        TextView tv_two_title;
        ImageView iv_two_imageview_one;
        ImageView iv_two_imageview_two;


        public RecycleTwo(@NonNull View inflate) {
            super(inflate);
            tv_two_messages = inflate.findViewById(R.id.tv_two_messages);
            tv_two_title = inflate.findViewById(R.id.tv_two_title);
            iv_two_imageview_one = inflate.findViewById(R.id.iv_two_imageview_one);
            iv_two_imageview_two = inflate.findViewById(R.id.iv_two_imageview_two);
        }
    }*/

写一个基类
BaseAbstractViewHolder类

/**
 *
 * 写一个基类,继承RecyclerView然后让三个子类继承基类,
 * 这样可以增加代码阅读性,健壮性,
 */
public  abstract  class BaseAbstractViewHolder extends RecyclerView.ViewHolder  {

    public BaseAbstractViewHolder(@NonNull View itemView) {
        super(itemView);
    }

//写一个静态方法,让每个类的功能在类里面把数据绑定在视图上
    public abstract void onBindViewHolder(NewsBean.ResultBean.DataBean newsBean, MainActivity mainActivity);
}

RecycleOne类如下,Two,Three也是一样的只是布局不一样。
让这三个类继承基类

public class RecycleOne extends BaseAbstractViewHolder {

    TextView tv_messages;
    TextView tv_title;
    ImageView iv_imageview;


    public RecycleOne(@NonNull View inflate) {
        super(inflate);
        tv_messages = inflate.findViewById(R.id.tv_messages);
        tv_title = inflate.findViewById(R.id.tv_title);
        iv_imageview = inflate.findViewById(R.id.iv_imageview);
    }

    @Override
    public void onBindViewHolder(NewsBean.ResultBean.DataBean newsBean, MainActivity mainActivity) {
        tv_title.setText(newsBean.getAuthor_name());
         tv_messages.setText(newsBean.getTitle());
        Glide.with(mainActivity).load(newsBean.getThumbnail_pic_s()).into(iv_imageview);
    }
}
发布了16 篇原创文章 · 获赞 5 · 访问量 6562

猜你喜欢

转载自blog.csdn.net/ggy_yao/article/details/84726955