写一个简单的多布局

。。。这篇文章适合一些会recyclerView适配器但是不会多布局的萌新参考 

1 每个布局写一个XML (名字起的不规范 嘿嘿)

具体的XML内容我就不写了吧 有萌新看不懂的话 可以留言 我再发 

2  recyclerView的适配器继承什么的我就不写了吧 

首先在适配器里写一个getItemType方法:

if判断设置type的返回值 position==0就是recyclerView的第一行显示的内容 因为我这个布局是固定的所以这么判断 你可以根据自己的情况来改

@Override
    public int getItemViewType(int position) {
        if (position == 0) {
            return 0;
        } else if (position == 1) {
            return 1;
        } else if (position == 2) {
            return 2;
        }
            return super.getItemViewType(position);

    }

然后在onCreateViewHolder方法里引入布局:

if判断i的值 i其实就是上边返回的type的值 

然后分别导入布局  这些布局全继承RecyclerView.ViewHolder 分别return viewHolder

@NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if (i == 0) {
            View inflate = LayoutInflater.from(context).inflate(R.layout.layout_1, viewGroup, false);
            RecyclerView.ViewHolder viewHolder = new ViewHolder1(inflate);
            return viewHolder;
        } else if (i == 1) {
            View inflate = LayoutInflater.from(context).inflate(R.layout.layout_2, viewGroup, false);
            RecyclerView.ViewHolder viewHolder = new ViewHolder2(inflate);
            return viewHolder;
        } else if (i == 2) {
            View inflate = LayoutInflater.from(context).inflate(R.layout.layout_3, null, false);
            RecyclerView.ViewHolder viewHolder = new ViewHolder3(inflate);
            return viewHolder;
        }
        return null;
    }
public static class ViewHolder1 extends RecyclerView.ViewHolder {
        public View rootView;
        public Banner banner;

        public ViewHolder1(View rootView) {
            super(rootView);
            this.rootView = rootView;
            this.banner = (Banner) rootView.findViewById(R.id.banner);
        }

    }

    public static class ViewHolder2 extends RecyclerView.ViewHolder {
        public View rootView;
        public RecyclerView mRecyc2;

        public ViewHolder2(View rootView) {
            super(rootView);
            this.rootView = rootView;
            this.mRecyc2 = (RecyclerView) rootView.findViewById(R.id.mRecyc2);
        }

    }

    public static class ViewHolder3 extends RecyclerView.ViewHolder {
        public View rootView;
        public RecyclerView mRecyc3;

        public ViewHolder3(View rootView) {
            super(rootView);
            this.rootView = rootView;
            this.mRecyc3 = (RecyclerView) rootView.findViewById(R.id.mRecyc3);
        }

    }

最后在onBindViewHolder赋值:

if判断viewHodler是否继承与当前布局文件(emmm看名字很好懂的)

@Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        if (viewHolder instanceof ViewHolder1) {
            for (int j = 0; j <mList.size() ; j++) {
                images.add(mList.get(j).getThumbnail_pic_s());
            }
            ((ViewHolder1) viewHolder).banner.setImageLoader(new GlideImageLoader())
            .setImages(images)
            .start();
        }
        if (viewHolder instanceof ViewHolder2) {
            LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
            ((ViewHolder2) viewHolder).mRecyc2.setLayoutManager(manager);
            TwoAdapter adapter = new TwoAdapter(R.layout.layout_2a, mList);
            ((ViewHolder2) viewHolder).mRecyc2.setAdapter(adapter);
        }
        if (viewHolder instanceof ViewHolder3) {
            LinearLayoutManager manager = new LinearLayoutManager(context);
            ((ViewHolder3) viewHolder).mRecyc3.setLayoutManager(manager);
            ThreeAdapter adapter = new ThreeAdapter(R.layout.layout_3a, mList);
            ((ViewHolder3) viewHolder).mRecyc3.setAdapter(adapter);
        }
    }

再然后就没了 使用适配器就行了  希望大家能指点下 给点建议 谢谢

猜你喜欢

转载自blog.csdn.net/qq_42259105/article/details/81158335