分享一个RecyclerView多布局展示效果,GridLayoutManager每列下添加一个view

 

先看效果

思路

后台返回数据是一个json字符串,看到这个效果第一反应就是用RCV的GridLayoutManager,但中间的那个view是无法正常添加上去 ,

1.这里采用setSpanSizeLookup计算出自定义view显示全屏

2.在数据中添加假数据进行填充list

3.使用多布局进行展示自定义view和普通的view

4.点击view计算出需要展示第几个item进行显示操作

但这里可以使用setSpanSizeLookup方法进行判断,这个方法的意思大概就是 可以判断第几条 显示站占用几个item的大小,但我这里的grid是三列 需要计算出在第三个item后面 第7个后面添加,所以我吧每个position+1 进行取余,可以解决单数不好取余的问题

  layoutManage.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                                    @Override
                                    public int getSpanSize(int position) {

                                        if ((position + 1) % 4 == 0 && position != 0) {
                                            // KLog.e("tagg", position);
                                            return 3;//占用三个item
                                        }
                                        return 1;
                                    }
                                });

然后就是如果数据返回的数量不够,在最后一排无法显示需要添加的view,需要给他假数据!

  for (int i = 0; i < arrayList.size() % 4; i++) {//arrayList.size() % 4 算出剩余几个是4的倍数,循环添加
                                    if (i + 1 == arrayList.size() % 4) {如果添加的是最后一个,添加自定义view
                                        XhBxListBean.DataBean.DqlistBean dqlistBean2 = new XhBxListBean.DataBean.DqlistBean("", "", "", "", "", false, false);
                                        arrayList.add(dqlistBean2);
                                    } else {
                                        XhBxListBean.DataBean.DqlistBean dqlistBean1 = new XhBxListBean.DataBean.DqlistBean("", "1", "", "", "", false, false);
                                        arrayList.add(dqlistBean1);
                                    }
                                }

全部代码

  rcv_list = dialogs.findViewById(R.id.rcv_list);
                                GridLayoutManager layoutManage = new GridLayoutManager(getContext(), 3);
                                layoutManage.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                                    @Override
                                    public int getSpanSize(int position) {

                                        if ((position + 1) % 4 == 0 && position != 0) {
                                            // KLog.e("tagg", position);
                                            return 3;
                                        }
                                        return 1;
                                    }
                                });
                                rcv_list.setLayoutManager(layoutManage);
                                xhBxAdapter = new XhBxAdapter(XiheTreasureActivity.this, new XhBxAdapter.IAddListListener() {
                                    @Override
                                    public void onClick(int position) {
                                        String context = arrayList.get(position).getDqdesc();
                                        for (int i = 0; i < arrayList.size(); i++) {
                                            arrayList.get(i).setIs_gone(false);
                                        }

                                        if (position % 4 == 0) {
                                            KLog.e("tag", "没有加");
                                            arrayList.get(position + 3).setIs_gone(true);
                                            arrayList.get(position + 3).setDqdesc(context);
                                            xhBxAdapter.setViewGone(1);
                                        } else if ((position + 1) % 4 == 0) {

                                        } else if ((position + 2) % 4 == 0) {
                                            arrayList.get(position + 1).setIs_gone(true);
                                            arrayList.get(position + 1).setDqdesc(context);
                                            xhBxAdapter.setViewGone(3);
                                            KLog.e("tag", "加两个");
                                        } else if ((position + 3) % 4 == 0) {
                                            arrayList.get(position + 2).setIs_gone(true);
                                            arrayList.get(position + 2).setDqdesc(context);
                                            xhBxAdapter.setViewGone(2);
                                            KLog.e("tag", "加三个");
                                        }

                                        xhBxAdapter.notifyDataSetChanged();
                                        rcv_list.scrollToPosition(position);
                                        GridLayoutManager mLayoutManager =
                                                (GridLayoutManager) rcv_list.getLayoutManager();
                                        mLayoutManager.scrollToPositionWithOffset(position, 0);//移动位置

                                    }
                                });
                                rcv_list.setAdapter(xhBxAdapter);
                                arrayList.clear();
                                for (int i = 0; i < xdInfoBean.getData().getDqlist().size(); i++) {
                                    XhBxListBean.DataBean.DqlistBean item = xdInfoBean.getData().getDqlist().get(i);
                                    if ((arrayList.size() + 1) % 4 == 0 && i != 0) {
                                        XhBxListBean.DataBean.DqlistBean dqlistBean = new XhBxListBean.DataBean.DqlistBean("", "", "", "", "", false, true);
                                        arrayList.add(dqlistBean);
                                        XhBxListBean.DataBean.DqlistBean dqlistBeans = new XhBxListBean.DataBean.DqlistBean(item.getId(), item.getDqname(), item.getPic(), item.getDqdesc(), item.getStatus(), false, true);
                                        arrayList.add(dqlistBeans);
                                    } else {
                                        XhBxListBean.DataBean.DqlistBean dqlistBean = new XhBxListBean.DataBean.DqlistBean(item.getId(), item.getDqname(), item.getPic(), item.getDqdesc(), item.getStatus(), false, true);
                                        arrayList.add(dqlistBean);
                                    }
                                }
                                for (int i = 0; i < arrayList.size() % 4; i++) {
                                    if (i + 1 == arrayList.size() % 4) {
                                        XhBxListBean.DataBean.DqlistBean dqlistBean2 = new XhBxListBean.DataBean.DqlistBean("", "", "", "", "", false, false);
                                        arrayList.add(dqlistBean2);
                                    } else {
                                        XhBxListBean.DataBean.DqlistBean dqlistBean1 = new XhBxListBean.DataBean.DqlistBean("", "1", "", "", "", false, false);
                                        arrayList.add(dqlistBean1);
                                    }
                                }

                                xhBxAdapter.setData(arrayList);
   
emmmmm~暂时懒得上传github 晚点再说
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值