セクションヘッダーを使用してグリッドのようなレイアウトを実装したい。考える 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;
}
}
});
私自身の質問への回答:アダプターを設定した後、アクティビティからgetSpanSizeLookup()をオーバーライドします。