package com.paging.gridview; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.AbsListView; import android.widget.ListAdapter; import java.util.List; public class PagingGridView extends HeaderGridView { public interface Pagingable { void onLoadMoreItems(); void onReflesh(); } @Override public boolean onTouchEvent(MotionEvent ev) { //�жϵ�ǰ�����ĸ����򻬶� return super.onTouchEvent(ev); } private boolean isLoading; private boolean hasMoreItems; private Pagingable pagingableListener; private LoadingView loadinView; public PagingGridView(Context context) { super(context); init(); } public PagingGridView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public PagingGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public boolean isLoading() { return this.isLoading; } public void setIsLoading(boolean isLoading) { this.isLoading = isLoading; } public void setPagingableListener(Pagingable pagingableListener) { this.pagingableListener = pagingableListener; } public void setHasMoreItems(boolean hasMoreItems) { this.hasMoreItems = hasMoreItems; if (!this.hasMoreItems) { removeFooterView(loadinView); } } public boolean hasMoreItems() { return this.hasMoreItems; } public void onFinishLoading(boolean hasMoreItems, List<? extends Object> newItems) { setHasMoreItems(hasMoreItems); setIsLoading(false); if (newItems != null && newItems.size() > 0) { ListAdapter adapter = ((FooterViewGridAdapter) getAdapter()) .getWrappedAdapter(); if (adapter instanceof PagingBaseAdapter) { ((PagingBaseAdapter) adapter).addMoreItems(newItems); } } } public View getLoadingView() { return loadinView; } int mCurrentFirstVisiItem = -1; private void init() { isLoading = false; loadinView = new LoadingView(getContext()); addFooterView(loadinView); setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { // ��������ʱ case OnScrollListener.SCROLL_STATE_IDLE: if (view.getLastVisiblePosition() == (view.getCount() - 1)) { pagingableListener.onLoadMoreItems(); } if (view.getFirstVisiblePosition() == 0) { pagingableListener.onReflesh(); } break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { mCurrentFirstVisiItem = firstVisibleItem; // if (totalItemCount > 0) { // int lastVisibleItem = firstVisibleItem + visibleItemCount; // if (!isLoading && hasMoreItems && (lastVisibleItem == // totalItemCount)) { // if (pagingableListener != null) { // isLoading = true; // pagingableListener.onLoadMoreItems(); // } // // } // } } }); } }