先看效果
思路
后台返回数据是一个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 晚点再说