我使用的是GridLayoutManager,所以动态设置recyclerview的列数(每行)。下面是我的代码:
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int num = 0;
if(position == 0)
num = 2;
else if(position == 1)
num = 1;
else if (position % 4 == 0)
num = 1;
else
num = 2;
Log.i("spansize", "spansize: " + num);
return num;
}
});
mAdapter = new ImageAdapter(getActivity(), mBlessingPics, options, ImageAdapter.POPULAR);
mPopularImagesGrid.setLayoutManager(gridLayoutManager);
mPopularImagesGrid.setAdapter(mAdapter);
mAdapter.setOnClick(this);但是,列数似乎没有更新。如下图所示:

我可以在logcat中验证spansize的数量是否在2或1之间变化,但实际的recyclerview并没有显示出来。它只显示每行的一个列/跨度。
编辑:我无法使第一行包含2个项目/列。第二个项目始终放在第二行。我打算在第二行有1列让路给一个原生广告,这将占据整个行。我在我的spansizelookup中使用了这个:return (position % 3) == 0 ? 1 : 2;

发布于 2018-02-18 12:34:47
下面是你的方法的重要部分:
if(position == 0)
num = 2;
else if(position == 1)
num = 1;
else if (position % 4 == 0)
num = 1;
else
num = 2;因此,对于位置1和4, 8, 12, 16...,跨度大小将为1,对于其他所有位置,跨度大小将为2。这意味着永远不会有两个跨度大小为1的项目相邻,而且由于您的网格只有两个跨度,所以所有内容都需要在自己的行上。我使用了你的SpanSizeLookup,但是布局很简单,我看到了这个:

因此,如果您希望有时看到两个相邻的图像,而有时只看到一个图像,那么您将需要一种不同的算法来查找跨度大小。例如:
return (position % 3) == 0 ? 2 : 1;

https://stackoverflow.com/questions/48848374
复制相似问题