int FindCurrentSectionPosition(int fromPosition) { IListAdapter adapter = Adapter; if (fromPosition >= adapter.Count) { return(-1); // dataset has changed, no candidate } if (adapter.GetType().IsAssignableFrom(typeof(ISectionIndexer))) { // try fast way by asking section indexer ISectionIndexer indexer = (ISectionIndexer)adapter; int sectionPosition = indexer.GetSectionForPosition(fromPosition); int itemPosition = indexer.GetPositionForSection(sectionPosition); int typeView = adapter.GetItemViewType(itemPosition); if (IsItemViewTypePinned(adapter, typeView)) { return(itemPosition); } // else, no luck } // try slow way by looking through to the next section item above for (int position = fromPosition; position >= 0; position--) { int viewType = adapter.GetItemViewType(position); if (IsItemViewTypePinned(adapter, viewType)) { return(position); } } return(-1); // no candidate found }
int findCurrentSectionPosition(int fromPosition) { IListAdapter adapter = Adapter; // if (adapter.GetType() == ISectionIndexer) { // // try fast way by asking section indexer // SectionIndexerImpl indexer = (SectionIndexerImpl) adapter; // int sectionPosition = indexer.GetSectionForPosition(fromPosition); // int itemPosition = indexer.GetPositionForSection(sectionPosition); // int typeView = adapter.GetItemViewType(itemPosition); // if (isItemViewTypePinned(adapter, typeView)) { // return itemPosition; // } // else, no luck // } // try slow way by looking through to the next section item above for (int position = fromPosition; position >= 0; position--) { int viewType = adapter.GetItemViewType(position); if (isItemViewTypePinned(adapter, viewType)) { return(position); } } return(-1); // no candidate found }
public int GetItemViewType(int position) { int numHeadersAndPlaceholders = HeadersCount * mNumColumns; if (position < numHeadersAndPlaceholders && (position % mNumColumns != 0)) { // Placeholders get the last view type number return mAdapter != null ? mAdapter.ViewTypeCount : 1; } if (mAdapter != null && position >= numHeadersAndPlaceholders && position < numHeadersAndPlaceholders + mAdapter.Count) { int adjPosition = position - numHeadersAndPlaceholders; int adapterCount = mAdapter.Count; if (adjPosition < adapterCount) { return mAdapter.GetItemViewType(adjPosition); } } int numFootersAndPlaceholders = FootersCount * mNumColumns; if (mAdapter != null && position < numHeadersAndPlaceholders + mAdapter.Count + numFootersAndPlaceholders) { return mAdapter != null ? mAdapter.ViewTypeCount : 1; } return AdapterView.ItemViewTypeHeaderOrFooter; }
int FindFirstVisibleSectionPosition(int firstVisibleItem, int visibleItemCount) { IListAdapter adapter = Adapter; int adapterDataCount = adapter.Count; if (LastVisiblePosition >= adapterDataCount) { return(-1); // dataset has changed, no candidate } if (firstVisibleItem + visibleItemCount >= adapterDataCount) {//added to prevent index Outofbound (in case) visibleItemCount = adapterDataCount - firstVisibleItem; } for (int childIndex = 0; childIndex < visibleItemCount; childIndex++) { int position = firstVisibleItem + childIndex; int viewType = adapter.GetItemViewType(position); if (IsItemViewTypePinned(adapter, viewType)) { return(position); } } return(-1); }
public int GetItemViewType(int position) { int numHeadersAndPlaceholders = GetHeadersCount() * _numColumns; int adapterViewTypeStart = _adapter == null ? 0 : _adapter.ViewTypeCount - 1; int type = ItemViewTypeHeaderOrFooter; if (_cachePlaceHoldView) { // Header if (position < numHeadersAndPlaceholders) { if (position == 0) { if (_cacheFirstHeaderView) { type = adapterViewTypeStart + _headerViewInfos.Count + _footerViewInfos.Count + 1 + 1; } } if (position % _numColumns != 0) { type = adapterViewTypeStart + (position / _numColumns + 1); } } } // Adapter int adjPosition = position - numHeadersAndPlaceholders; int adapterCount = 0; if (_adapter != null) { adapterCount = GetAdapterAndPlaceHolderCount(); if (adjPosition >= 0 && adjPosition < adapterCount) { if (adjPosition < _adapter.Count) { type = _adapter.GetItemViewType(adjPosition); } else { if (_cachePlaceHoldView) { type = adapterViewTypeStart + _headerViewInfos.Count + 1; } } } } if (_cachePlaceHoldView) { // Footer int footerPosition = adjPosition - adapterCount; if (footerPosition >= 0 && footerPosition < Count && (footerPosition % _numColumns) != 0) { type = adapterViewTypeStart + _headerViewInfos.Count + 1 + (footerPosition / _numColumns + 1); } } return(type); }
public int GetItemViewType(int position) { int numHeaders = HeadersCount; if (mAdapter != null && position >= numHeaders) { int adjPosition = position - numHeaders; int adapterCount = mAdapter.Count; if (adjPosition < adapterCount) { return(mAdapter.GetItemViewType(adjPosition)); } } return(AdapterView.ItemViewTypeHeaderOrFooter); }
int IAdapter.GetItemViewType (int position) { int numHeadersAndPlaceholders = getHeadersCount() * _numColumns; int adapterViewTypeStart = mAdapter == null ? 0 : mAdapter.ViewTypeCount - 1; int type = AdapterView.ItemViewTypeHeaderOrFooter; if (cachePlaceHoldView) { // Header if (position < numHeadersAndPlaceholders) { if (position == 0) { if (mCacheFirstHeaderView) { type = adapterViewTypeStart + _headerViewInfos.Count + _footerViewInfos.Count + 1 + 1; } } if (position % _numColumns != 0) { type = adapterViewTypeStart + (position / _numColumns + 1); } } } // Adapter int adjPosition = position - numHeadersAndPlaceholders; int adapterCount = 0; if (mAdapter != null) { adapterCount = getAdapterAndPlaceHolderCount(); if (adjPosition >= 0 && adjPosition < adapterCount) { if (adjPosition < mAdapter.Count) { type = mAdapter.GetItemViewType(adjPosition); } else { if (cachePlaceHoldView) { type = adapterViewTypeStart + _headerViewInfos.Count + 1; } } } } if (cachePlaceHoldView) { // Footer int footerPosition = adjPosition - adapterCount; if (footerPosition >= 0 && footerPosition < obj.Count && (footerPosition % _numColumns) != 0) { type = adapterViewTypeStart + _headerViewInfos.Count() + 1 + (footerPosition / _numColumns + 1); } } if (_debug) { Log.Debug(_logTag, String.Format("getItemViewType: pos: %s, result: %s", position, type, cachePlaceHoldView, mCacheFirstHeaderView)); } return type; }
public void OnScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { Console.WriteLine("on scrolll event"); if (psl.mDelegateOnScrollListener != null) // delegate { psl.mDelegateOnScrollListener.OnScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } // get expected adapter or fail fast IListAdapter adapter = psl.Adapter; if (adapter == null || visibleItemCount == 0) { return; // nothing to do } Boolean isFirstVisibleItemSection = isItemViewTypePinned(adapter, adapter.GetItemViewType(firstVisibleItem)); if (isFirstVisibleItemSection) { View sectionView = psl.GetChildAt(0); if (sectionView.Top == psl.PaddingTop) // view sticks to the top, no need for pinned shadow { psl.destroyPinnedShadow(); } else // section doesn't stick to the top, make sure we have a pinned shadow { psl.ensureShadowForPosition(firstVisibleItem, firstVisibleItem, visibleItemCount); } } else // section is not at the first visible position { int sectionPosition = psl.findCurrentSectionPosition(firstVisibleItem); if (sectionPosition > -1) // we have section position { psl.ensureShadowForPosition(sectionPosition, firstVisibleItem, visibleItemCount); } else // there is no section for the first visible item, destroy shadow { psl.destroyPinnedShadow(); } } }
public int GetItemViewType(int position) { int numHeadersAndPlaceholders = HeadersCount * mNumColumns; if (position < numHeadersAndPlaceholders && (position % mNumColumns != 0)) { return(mAdapter != null ? mAdapter.ViewTypeCount : 1); } if (mAdapter != null && position >= numHeadersAndPlaceholders) { int adjPosition = position - numHeadersAndPlaceholders; int adapterCount = mAdapter.Count; if (adjPosition < adapterCount) { return(mAdapter.GetItemViewType(adjPosition)); } } return(AdapterView.ItemViewTypeHeaderOrFooter); }
public void OnScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (mDelegateOnScrollListener != null) { // delegate mDelegateOnScrollListener.OnScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } // IListAdapter adapter = Adapter; if (adapter == null || visibleItemCount == 0) { return; // nothing to do } bool isFirstVisibleItemSection = IsItemViewTypePinned(adapter, adapter.GetItemViewType(firstVisibleItem)); if (isFirstVisibleItemSection) { View sectionView = GetChildAt(0); if (sectionView.Top == PaddingTop) { // view sticks to the top, no need for pinned shadow DestroyPinnedShadow(); } else { // section doesn't stick to the top, make sure we have a pinned shadow EnsureShadowForPosition(firstVisibleItem, firstVisibleItem, visibleItemCount); } } else { // section is not at the first visible position int sectionPosition = FindCurrentSectionPosition(firstVisibleItem); if (sectionPosition > -1) { // we have section position EnsureShadowForPosition(sectionPosition, firstVisibleItem, visibleItemCount); } else { // there is no section for the first visible item, destroy shadow DestroyPinnedShadow(); } } }
public override int GetItemViewType(int position) { return(mAdapter.GetItemViewType(position)); }
public override int GetItemViewType(int position) { int itemViewType = _wrappedAdapter.GetItemViewType(position); return(itemViewType); }