android RecyclerView GridLayoutManager setSpanSizeLookup 不执行(不调用)

 GridLayoutManager layoutManager = new GridLayoutManager(this, 2);

        layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                return listLeft.get(position).columnCount;
            }
        });
        recycler_view_left.setLayoutManager(layoutManager);

问题:

上面的代码不执行;

解决方案:

在调用上面代码的时候需要先配置adapter;

TempPressAdapter adapter = new TempPressAdapter(R.layout.item_temp_press, listLeft, this);
        recycler_view_left.setAdapter(adapter);


可以通过设置RecyclerView的ItemDecoration来实现间距的设置。例如,可以自定义一个继承自RecyclerView.ItemDecoration的类,在其中重写getItemOffsets()方法来设置每个Item的间距。具体实现请参考以下代码: ``` public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration { private int spanCount; private int spacing; private boolean includeEdge; public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) { this.spanCount = spanCount; this.spacing = spacing; this.includeEdge = includeEdge; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int position = parent.getChildAdapterPosition(view); // item position int column = position % spanCount; // item column if (includeEdge) { outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing) outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing) if (position < spanCount) { // top edge outRect.top = spacing; } outRect.bottom = spacing; // item bottom } else { outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing) outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f / spanCount) * spacing) if (position >= spanCount) { outRect.top = spacing; // item top } } } } ``` 然后在使用GridLayoutManagerRecyclerView中,调用addItemDecoration()方法添加该ItemDecoration即可: ``` int spanCount = 3; // number of columns int spacing = 50; // spacing between columns boolean includeEdge = false; // include edge spacing or not recyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge)); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值