Baserecyclerviewadapterhelper: GridLayoutManager设置SpanSizeLookUp无效的问题

Created on 25 Aug 2017  ·  6Comments  ·  Source: CymChad/BaseRecyclerViewAdapterHelper

`陈大,你好。我遇到了一个问题。我使用GridLayoutManager创建多布局时,使用adapter.setSpanSizeLookUp()方法无效,如下:

@Override
protected void setUpView() {
    super.setUpView();
    adapter = new SampleMultipleListAdapter(dataList);
    setAdapter(adapter);
    GridLayoutManager gridLayoutManager =new GridLayoutManager(this,2);
    setLayoutManager(gridLayoutManager);
    adapter.setOnLoadMoreListener(listener, recycler.getRecyclerView());
    adapter.setSpanSizeLookup(new BaseQuickAdapter.SpanSizeLookup() {
        @Override
        public int getSpanSize(GridLayoutManager gridLayoutManager, int position) {
            return dataList.get(position).getSpanSize();
        }
    });
}

我试着自己给GridlayoutManager设置SpanSizeLookUp就可以了,代码如下:

class GridSizeLookUp extends GridLayoutManager.SpanSizeLookup {
    @Override
    public int getSpanSize(int position) {
        return dataList.get(position).getSpanSize();
    }
}

@Override
protected void setUpView() {
super.setUpView();
adapter = new SampleMultipleListAdapter(dataList);
setAdapter(adapter);
GridLayoutManager gridLayoutManager =new GridLayoutManager(this,2);
gridLayoutManager.setSpanSizeLookup(new GridSizeLookUp());
setLayoutManager(gridLayoutManager);
adapter.setOnLoadMoreListener(listener, recycler.getRecyclerView());
}

但是下拉加载更多时还是会有数组溢出等别的问题。

我想知道为什么adapter.setSpanSizeLookup()方法无效,是不是我哪里写的有问题?

Most helpful comment

@Weimore
必须要先setAdapter()
再设置setSpanSizeLookup

All 6 comments

数组溢出等问题已解决,目前使用自己给GridLayoutManager设置spanSapanSizeLookUp的方法已可以解决问题。但是adapter.setSpanSizeLookUp()方法仍未能正常工作。

多布局demo使用了setSpanSizeLookUp是有效的。

好的吧,我再看看源码,分析分析

getSpanSize 指定是占用GridLayoutManager中的几个格。如果GridLayoutManager(this,2);是2,public int getSpanSize(int position)返回2就会占满整个屏幕宽度,也就是2格的位置。

@Weimore
必须要先setAdapter()
再设置setSpanSizeLookup

还有这等bug ,必须要先setAdapter()
再设置setSpanSizeLookup
解决。

Was this page helpful?
0 / 5 - 0 ratings