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