下面列出了android.support.v7.widget.GridLayoutManager#setSpanSizeLookup ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
mRecyclerView = (RecyclerView) view;
GridLayoutManager layoutManager = new GridLayoutManager(view.getContext(), span);
mRecyclerView.setLayoutManager(layoutManager);
adapter = new GridAdapter(list);
mRecyclerView.setAdapter(adapter);
DividerItemDecoration itemDecoration = new DividerItemDecoration();
itemDecoration.setDividerLookup(new AgileDividerLookup());
mRecyclerView.addItemDecoration(itemDecoration);
if (type == MainActivity.TYPE_AGILE) {
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return span / adapter.getItemViewType(position);
}
});
}
}
private void initView() {
mAdapter = new VoiceToolsAdapter();
mAdapter.setOnVoicePlayListener(this);
GridLayoutManager mLayoutManager = new GridLayoutManager(this, 4);
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (position == 0 || position == 9) {
return 4;
}
return 1;
}
});
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setItemAnimator(null);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (type == TYPE_GRID_LAYOUT) {
gridLayoutManager = new GridLayoutManager(getActivity(), 2);
mRecyclerView.setLayoutManager(gridLayoutManager);//这里用线性宫格显示 类似于grid view
} else if (type == TYPE_STAGGERED_GRID_LAYOUT) {
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//这里用线性宫格显示 类似于瀑布流
} else {
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));//这里用线性显示 类似于list view
}
mAdapter = new HeaderBottomItemAdapter(getActivity());
mRecyclerView.setAdapter(mAdapter);
if (gridLayoutManager != null) {//设置头部及底部View占据整行空间
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return (mAdapter.isHeaderView(position) || mAdapter.isBottomView(position)) ? gridLayoutManager.getSpanCount() : 1;
}
});
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView)
{
RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
if (manager instanceof GridLayoutManager)
{
final GridLayoutManager gridManager = ((GridLayoutManager) manager);
gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup()
{
@Override
public int getSpanSize(int position)
{
if (isInSectionPos(position)
|| isInHeadViewPos(position)
|| isInFootViewPos(position)
|| isInLoadMorePos(position)
|| isInEmptyStatus())
return gridManager.getSpanCount();
else
return 1;
}
});
gridManager.setSpanCount(gridManager.getSpanCount());
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
//为了兼容GridLayout
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof GridLayoutManager) {
final GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;
final GridLayoutManager.SpanSizeLookup spanSizeLookup = gridLayoutManager.getSpanSizeLookup();
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (isHeaderViewPos(position)) {
return gridLayoutManager.getSpanCount();
} else if (isFooterViewPos(position)) {
return gridLayoutManager.getSpanCount();
}
if (spanSizeLookup != null)
return spanSizeLookup.getSpanSize(position);
return 1;
}
});
gridLayoutManager.setSpanCount(gridLayoutManager.getSpanCount());
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_recycler, container, false);
unbinder = ButterKnife.bind(this, rootView);
if (list == null) list = new ArrayList<>();
else spinner.setVisibility(View.GONE);
adapter = new SectionedOmniAdapter((AppCompatActivity) getActivity(), list);
manager = new GridLayoutManager(getContext(), PreferenceUtils.getColumnNumber(getContext(), false));
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (adapter.getItemViewType(position) == 0 || adapter.getItemViewType(position) == 4)
return manager.getSpanCount();
else return 1;
}
});
recycler.setLayoutManager(manager);
recycler.setAdapter(adapter);
return rootView;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_channel_manager);
getIntentData();
context = this;
initToolbar();
listDataSave = new ListDataSave(this, "channel");
mRecyclerView = (RecyclerView) findViewById(com.example.channelmanager.R.id.id_tab_recycler_view);
GridLayoutManager gridLayout = new GridLayoutManager(context, 4);
gridLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
boolean isHeader = mRecyclerAdapter.getItemViewType(position) == IChannelType.TYPE_MY_CHANNEL_HEADER ||
mRecyclerAdapter.getItemViewType(position) == IChannelType.TYPE_REC_CHANNEL_HEADER;
return isHeader ? 4 : 1;
}
});
mRecyclerView.setLayoutManager(gridLayout);
mRecyclerView.addItemDecoration(new GridItemDecoration(APPConst.ITEM_SPACE));
initData();
mRecyclerAdapter = new ChannelAdapter(context, mRecyclerView, mMyChannelList, mRecChannelList, 1, 1);
mRecyclerAdapter.setChannelItemClickListener(this);
mRecyclerView.setAdapter(mRecyclerAdapter);
}
@Override
public void setLayoutManager(final RecyclerView recyclerView) {
final GridLayoutManager gridLayoutManager = new GridLayoutManager(recyclerView.getContext(), getColumnSize() * getColumnMultiplier());
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if(!(recyclerView.getAdapter() instanceof SpannableRecyclerAdapter)){
throw new IllegalStateException("RecyclerView adapter must extend SpannableRecyclerAdapter");
}
return AptoideUtils.UI.getSpanSize(recyclerView, position);
}
});
gridLayoutManager.setSpanCount(getColumnSize() * getColumnMultiplier());
recyclerView.setLayoutManager(gridLayoutManager);
}
@Override
public void setRecyclerAdapter(RecommendMultiItemAdapter adapter) {
GridLayoutManager gridLayoutManager = new GridLayoutManager(_mActivity, 2);
mRecyclerView.setLayoutManager(gridLayoutManager);
mRecyclerView.setAdapter(adapter);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
// 上拉加载更多视图
if (position == adapter.getData().size()) {
return 2;
}
return adapter.getData().get(position).getSpanSize();
}
});
}
private RecyclerView.LayoutManager getLayoutManager() {
switch (layoutManagerType) {
case LayoutManager.LINEAR:
return new LinearLayoutManager(this);
case LayoutManager.GRID:
GridLayoutManager result = new GridLayoutManager(this, 2);
result.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (position % 3 == 0) { // Something to show
return 2;
} else {
return 1;
}
}
});
return result;
case LayoutManager.STAGGERED_GRID:
return new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
default:
throw new IllegalStateException("layoutManagerType has a unknown value: " +
layoutManagerType);
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
adapter.onAttachedToRecyclerView(recyclerView);
RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
if (manager instanceof GridLayoutManager) {
final GridLayoutManager gridManager = ((GridLayoutManager) manager);
gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return (isHeader(position) || isFooter(position) || isRefreshHeader(position))
? gridManager.getSpanCount() : 1;
}
});
}
}
@Override
protected void initEvents() {
major = getIntent().getStringExtra("major");
gender = getIntent().getStringExtra("gender");
setTitle(major == null ? "category" : major);
int spanCount = getResources().getInteger(R.integer.home_span_count);
eBookRankPresenter = new EBookPresenterImpl(this);
bookInfoResponses = new ArrayList<>();
mSwipeRefreshLayout.setColorSchemeResources(R.color.recycler_color1, R.color.recycler_color2,
R.color.recycler_color3, R.color.recycler_color4);
//设置布局管理器
mLayoutManager = new GridLayoutManager(this, spanCount);
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return mListAdapter.getItemColumnSpan(position);
}
});
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(mLayoutManager);
//设置adapter
mListAdapter = new EBookListAdapter(this, bookInfoResponses, spanCount);
mRecyclerView.setAdapter(mListAdapter);
//设置Item增加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.addOnScrollListener(new RecyclerViewScrollDetector());
mSwipeRefreshLayout.setOnRefreshListener(this);
onRefresh();
}
private void initView() {
mAdapter = new CoachRankAdapter();
GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (position == 0) {
return 3;
}
return 1;
}
});
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.addItemDecoration(new GridSpacingItemDecoration((int) PixelUtil.dp2px(20), 3, 1));
}
/**
* 页面进入时,显示RecyclerView,调用onAttachedToRecyclerView,做一些注册工作;
* 页面退出时,销毁RecyclerView,调用onDetachedFromRecyclerView,做一些解注册和其他资源回收的操作。
* @param recyclerView recyclerView
*/
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
//增加对RecyclerArrayAdapter奇葩操作的修复措施
registerAdapterDataObserver(new FixDataObserver(recyclerView));
if (mSetHeaderAndFooterSpan){
//下面是处理grid试图上拉加载的问题
RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
if (manager instanceof GridLayoutManager) {
final GridLayoutManager gridManager = ((GridLayoutManager) manager);
gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
// 如果当前是footer的位置,那么该item占据2个单元格,正常情况下占据1个单元格
int itemViewType = getItemViewType(position);
//注意,具体可以看DefaultEventDelegate类中的EventFooter类代码
//如果是头部header或者底部footer,则直接
if (itemViewType>=DefaultEventDelegate.EventFooter.HIDE &&
itemViewType<=DefaultEventDelegate.EventFooter.SHOW_NO_MORE){
RefreshLogUtils.d("onAttachedToRecyclerView----这个是header和footer");
return gridManager.getSpanCount();
}else {
RefreshLogUtils.d("onAttachedToRecyclerView----");
return 1;
}
}
});
}
}
}
@Override public void bind(List<Shot> shots) {
mRecyclerView.setAdapter(mAdapter = new ArchiveAdapter(shots, mRecyclerView, mItemListener));
GridLayoutManager layoutManager = new GridLayoutManager(getContext(), 2);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override public int getSpanSize(int position) {
return mAdapter.getItemViewType(position) == ArchiveAdapter.TYPE_SHOT ? 1 : 2;
}
});
mRecyclerView.setLayoutManager(layoutManager);
}
private void init() {
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
adapter = new LightAdapter();
GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
layoutManager.setSpanSizeLookup(adapter.spanSizeLookup(2, 2));
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
swipeRefreshLayout.setOnRefreshListener(this);
}
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.folders);
foldersRecyclerView = (RecyclerView) findViewById(R.id.folders);
foldersRecyclerView.setHasFixedSize(true);
int squareSideLengthInPixels = getResources().getDimensionPixelSize(R.dimen.square_side_length);
float radius = radius(squareSideLengthInPixels);
float adjacent = adjacent(radius);
int spacingInPixels = -(Math.round(radius - adjacent));
foldersRecyclerView.addItemDecoration(new SpacesItemDecoration(spacingInPixels));
layoutManager = new GridLayoutManager(this, SPAN_COUNT, LinearLayoutManager.VERTICAL, false);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override public int getSpanSize(int position) {
return position % 3 == 0 ? 2 : 1;
}
});
foldersRecyclerView.setLayoutManager(layoutManager);
eventsPort = obtainEventsPort();
foldersPresenter = new FoldersPresenter(this, eventsPort);
}
@Nullable @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
unbinder = ButterKnife.bind(this, view);
adapter = new HomeAdapter(inflater, this);
layoutManager = new GridLayoutManager(getActivity(), spanCount);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override public int getSpanSize(int position) {
int viewType = adapter.getItemViewType(position);
if (viewType == HomeAdapter.VIEW_TYPE_LOADING_MORE_NEXT_PAGE
|| viewType == HomeAdapter.VIEW_TYPE_SECTION_HEADER) {
return spanCount;
}
return 1;
}
});
/*
recyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount,
getResources().getDimensionPixelSize(R.dimen.grid_spacing), true));
*/
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(layoutManager);
return view;
}
@Override
public void showMovies(final List<Movie> newMovieList) {
if (movieList == null) {
movieList = newMovieList;
} else {
movieList.addAll(newMovieList);
}
linearLayoutAnyFounded.setVisibility(View.GONE);
linearLayoutLoadFailed.setVisibility(View.GONE);
recyclerViewMovies.setVisibility(View.VISIBLE);
final GridLayoutManager layoutManager = new GridLayoutManager(this, columns, GridLayoutManager.VERTICAL, false);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position >= movieList.size() ? columns : 1;
}
});
recyclerViewMovies.setLayoutManager(layoutManager);
recyclerViewMovies.setItemAnimator(new DefaultItemAnimator());
listViewAdapter = new ListViewAdapterWithPagination(
new MovieListAdapter(movieList, new OnItemClickListener<Movie>() {
@Override
public void onClick(Movie movie, View view) {
startActivity(MovieProfileActivity.newIntent(ListPopularMoviesActivity.this, movie), ActivityOptionsCompat.makeSceneTransitionAnimation(ListPopularMoviesActivity.this, view.findViewById(R.id.imageview_poster), "moviePoster").toBundle());
}
@Override
public void onLongClick(Movie movie, View view) {
}
}
),
new OnShowMoreListener() {
@Override
public void showMore() {
scrollToItem = layoutManager.findFirstVisibleItemPosition();
presenter.loadMovies(++page);
}
},
itensPerPage);
recyclerViewMovies.setAdapter(listViewAdapter);
recyclerViewMovies.scrollToPosition(scrollToItem);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((DrawerActivity) getActivity()).setupDrawer(currentUser);
initStaticContent();
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 4);
gridLayoutManager.setSpanSizeLookup(onSpanSizeLookup);
categoriesGrid.setLayoutManager(gridLayoutManager);
adapter = new CategoriesGridAdapter();
categoriesGrid.setAdapter(adapter);
adapter.attachNumpadEditable(new NumpadEditable() {
@Override
public String getText() {
return amountText.getText().toString();
}
@Override
public void setText(String text) {
amountText.setText(text);
}
}, validator);
adapter.setOnCategoryClickListener(category -> {
if (validator.valid(amountText.getText().toString())) {
Expense e = new Expense();
e.setCategory(category);
if (!TextUtils.isEmpty(expenseNote.getText())) {
e.setNote(expenseNote.getText().toString());
}
e.setAmount(new BigDecimal(amountText.getText().toString()));
e.setReportedWhen(selectedDate);
analytics().trackExpenseCreated(e);
if(!TextUtils.isEmpty(e.getNote())) {
analytics().trackNoteEntered();
}
presenter.createExpense(e);
cleanAmountInput();
} else {
validator.onInvalidInput(amountText.getText().toString());
}
});
expensesAdapter = new TimelineExpensesAdapter();
expensesAdapter.setOnExpenseClickListener(e -> Navigator.goToExpenseDetails(getActivity(), e, true));
decor = new StickyHeaderDecoration(expensesAdapter);
LinearLayoutManager stickyHeaderLayoutManager = new LinearLayoutManager(getActivity());
timelineRecycler.setLayoutManager(stickyHeaderLayoutManager);
timelineRecycler.setAdapter(expensesAdapter);
timelineRecycler.addItemDecoration(decor);
}