I',使用StaggeredGridLayoutManager
for myRecyclerView
以在 2 列中显示宽度相等但高度不同的项目。因为我希望项目之间的差距相等,ItemDecoration
所以正在使用以下内容:
public class ImageCardDecoration extends RecyclerView.ItemDecoration {
private int margin;
public ImageCardDecoration(Context context) {
margin = 5;
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
int position = parent.getChildAdapterPosition(view);
int spanIndex =((StaggeredGridLayoutManager.LayoutParams)view.getLayoutParams()).getSpanIndex();
if (spanIndex == 0) {
outRect.left = 2 * margin;
outRect.right = margin;
} else {
outRect.left = margin;
outRect.right = 2 * margin;
}
outRect.top = 2 * margin;
if (position == 0 || position == 1)
outRect.top = 14 * margin;
}
}
它工作正常。但是在滚动recyclerview之后,当它得到时Idle
,布局管理器重新排序一些项目以填补空白(这很好,我想要这种行为),但如果一个项目从第二列移动到第一列,它不使用在上面的代码中为第一列定义的边距,如果项目从第一列移动到第二列,它也不会更新它的边距。如何解决这种不当行为?!