@Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { GridLayoutManager gridManager = (GridLayoutManager) recyclerView.getLayoutManager(); spanCount = gridManager.getSpanCount(); originalSpanLookup = gridManager.getSpanSizeLookup(); gridManager.setSpanSizeLookup(spanSizes); } }
/** * If a grid layout manager is set we sync the span count between the layout and the epoxy * adapter automatically. */ private void syncSpanCount() { LayoutManager layout = getLayoutManager(); if (layout instanceof GridLayoutManager && epoxyController != null) { GridLayoutManager grid = (GridLayoutManager) layout; if (epoxyController.getSpanCount() != grid.getSpanCount() || grid.getSpanSizeLookup() != epoxyController.getSpanSizeLookup()) { epoxyController.setSpanCount(grid.getSpanCount()); grid.setSpanSizeLookup(epoxyController.getSpanSizeLookup()); } } }
private void calculatePositionDetails(RecyclerView parent, int position, LayoutManager layout) { int itemCount = parent.getAdapter().getItemCount(); firstItem = position == 0; lastItem = position == itemCount - 1; horizontallyScrolling = layout.canScrollHorizontally(); verticallyScrolling = layout.canScrollVertically(); grid = layout instanceof GridLayoutManager; if (grid) { GridLayoutManager grid = (GridLayoutManager) layout; final SpanSizeLookup spanSizeLookup = grid.getSpanSizeLookup(); int spanSize = spanSizeLookup.getSpanSize(position); int spanCount = grid.getSpanCount(); int spanIndex = spanSizeLookup.getSpanIndex(position, spanCount); isFirstItemInRow = spanIndex == 0; fillsLastSpan = spanIndex + spanSize == spanCount; isInFirstRow = isInFirstRow(position, spanSizeLookup, spanCount); isInLastRow = !isInFirstRow && isInLastRow(position, itemCount, spanSizeLookup, spanCount); } }