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);
        }
예제 #5
0
            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();
                    }
                }
            }
예제 #9
0
            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();
                }
            }
        }
예제 #11
0
 public override int GetItemViewType(int position)
 {
     return(mAdapter.GetItemViewType(position));
 }
예제 #12
0
        public override int GetItemViewType(int position)
        {
            int itemViewType = _wrappedAdapter.GetItemViewType(position);

            return(itemViewType);
        }