RecyclerViewでリストを作る時、RecyclerView.ItemDecorationを使って各Viewの間隔を広げていた。左と右でサイズが違う事と1個だけアイテムを消すとズレる事に気づいた。
最初の表示 | 消したあと |
---|---|
![]() |
![]() |
getSpanIndexが削除前の値を返しているというのもあるけど、outRect.right = 0してるのに効かない時があるようだった。outRect.rightが設定された状態から0にしようとするとダメっぽいので、そもそも分岐するのをやめた。
最初の表示 | 消したあと |
---|---|
![]() |
![]() |
private class Decoration extends RecyclerView.ItemDecoration { private int mLeft, mTop, mRight, mBottom; Decoration(int left, int top, int right, int bottom) { mLeft = left; mTop = top; mRight = right; mBottom = bottom; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); int position = layoutParams.getViewAdapterPosition(); if (position == RecyclerView.NO_POSITION) { outRect.set(0, 0, 0, 0); return; } outRect.left = mLeft; outRect.top = mTop; outRect.right = mRight; outRect.bottom = mBottom; } }
全部のコードはここにおいた。
GitHub - hisaichi5518/RecyclerViewItemDecorationTest