パルカワ2

最近はFlutterをやっています

RecyclerView.ItemDecorationの中では分岐しないようにした

RecyclerViewでリストを作る時、RecyclerView.ItemDecorationを使って各Viewの間隔を広げていた。左と右でサイズが違う事と1個だけアイテムを消すとズレる事に気づいた。

最初の表示 消したあと
f:id:hisaichi5518:20160716180516p:plain f:id:hisaichi5518:20160716180529p:plain

getSpanIndexが削除前の値を返しているというのもあるけど、outRect.right = 0してるのに効かない時があるようだった。outRect.rightが設定された状態から0にしようとするとダメっぽいので、そもそも分岐するのをやめた。

最初の表示 消したあと
f:id:hisaichi5518:20160716180923p:plain f:id:hisaichi5518:20160716180955p:plain
    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