/** * Counts the number of items that would be need to fill out the last row in the group of items * with the given header. * * @param header Header set of items are grouped by. * @return The count of unfilled spaces in the last row. */ private int unFilledSpacesInHeaderGroup(int header) { // If mNumColumns is equal to zero we will have a divide by 0 exception if (mNumColumns == 0) { return 0; } int remainder = mDelegate.getCountForHeader(header) % mNumColumns; return remainder == 0 ? 0 : mNumColumns - remainder; }
protected void updateCount() { mCount = 0; int numHeaders = mDelegate.getNumHeaders(); if (numHeaders == 0) { mCount = mDelegate.getCount(); mCounted = true; return; } for (int i = 0; i < numHeaders; i++) { mCount += mDelegate.getCountForHeader(i) + mNumColumns; } mCounted = true; }
protected Position translatePosition(int position) { int numHeaders = mDelegate.getNumHeaders(); if (numHeaders == 0) { if (position >= mDelegate.getCount()) { return new Position(POSITION_FILLER, 0); } return new Position(position, 0); } // Translate GridView position to Adapter position. int adapterPosition = position; int place = position; int i; for (i = 0; i < numHeaders; i++) { int sectionCount = mDelegate.getCountForHeader(i); // Skip past fake items making space for header in front of // sections. if (place == 0) { // Position is first column where header will be. return new Position(POSITION_HEADER, i); } place -= mNumColumns; if (place < 0) { // Position is a fake so return null. return new Position(POSITION_HEADER_FILLER, i); } adapterPosition -= mNumColumns; if (place < sectionCount) { return new Position(adapterPosition, i); } // Skip past section end of section row filler; int filler = unFilledSpacesInHeaderGroup(i); adapterPosition -= filler; place -= sectionCount + filler; if (place < 0) { // Position is a fake so return null. return new Position(POSITION_FILLER, i); } } // Position is a fake. return new Position(POSITION_FILLER, i); }
@Override public int getCount() { if (mCounted) { return mCount; } mCount = 0; int numHeaders = mDelegate.getNumHeaders(); if (numHeaders == 0) { mCount = mDelegate.getCount(); mCounted = true; return mCount; } for (int i = 0; i < numHeaders; i++) { // Pad count with space for header and trailing filler in header // group. mCount += mDelegate.getCountForHeader(i) + unFilledSpacesInHeaderGroup(i) + mNumColumns; } mCounted = true; return mCount; }