[android] SpanSizeLookup을 사용하여 GridLayoutManager의 항목에 대한 범위 설정

섹션 헤더로 그리드와 같은 레이아웃을 구현하고 싶습니다. https://github.com/TonicArtos/StickyGridHeaders를 생각해보십시오.

내가 지금하는 일 :

mRecyclerView = (RecyclerView) view.findViewById(R.id.grid);
mLayoutManager = new GridLayoutManager(getActivity(), 2);
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                switch(mAdapter.getItemViewType(position)){
                    case MyAdapter.TYPE_HEADER:
                        return 1;
                    case MyAdapter.TYPE_ITEM:
                        return 2;
                    default:
                        return -1;
                }
            }
        });

mRecyclerView.setLayoutManager(mLayoutManager);

이제 일반 항목과 헤더의 스팬 크기가 1입니다. 어떻게 해결합니까?



답변

문제는 헤더의 범위 크기가 2이고 일반 항목의 범위 크기가 1이어야한다는 것입니다. 따라서 올바른 구현은 다음과 같습니다.

mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                switch(mAdapter.getItemViewType(position)){
                    case MyAdapter.TYPE_HEADER:
                        return 2;
                    case MyAdapter.TYPE_ITEM:
                        return 1;
                    default:
                        return -1;
                }
            }
        });


답변

헤더는 전체 목록의 범위 수와 동일한 범위를 가져야합니다.

mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
           switch(mAdapter.getItemViewType(position)){
                    case MyAdapter.TYPE_HEADER:
                        return mLayoutManager.getSpanCount();
                    case MyAdapter.TYPE_ITEM:
                        return 1;
                    default:
                        return -1;
                }
    }
});


답변

내 질문에 대한 대답 : 어댑터를 설정 한 후 Activity에서 getSpanSizeLookup ()을 재정의하십시오.


답변