diff --git a/gradle.properties b/gradle.properties index 49b5c3a..8fc3c0b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,13 @@ # org.gradle.parallel=true GROUP=com.pulltorefresh.library -VERSION_NAME=1.0.0 POM_ARTIFACT_ID=PullToRefresh + +(FIXME:正式发布SDK时需要切换到正式版本) +#快照版本 +#VERSION_NAME=1.0.6-SNAPSHOT +#正式版本 +VERSION_NAME=1.0.1 + SNAPSHOT_REPOSITORY_URL=http://maven.gengmei/nexus/content/repositories/gengmei-android-snapshots/ RELEASE_REPOSITORY_URL=http://maven.gengmei/nexus/content/repositories/gengmei-android/ diff --git a/library/build.gradle b/library/build.gradle index 12c0128..635256c 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 21 - buildToolsVersion "21.1.2" + compileSdkVersion 22 + buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 9 diff --git a/library/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java b/library/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java index e50037c..cbd0502 100755 --- a/library/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java +++ b/library/src/main/java/com/handmark/pulltorefresh/library/PullToRefreshListView.java @@ -25,7 +25,9 @@ import android.view.Gravity; import android.view.MotionEvent; import android.view.View; +import android.widget.Adapter; import android.widget.FrameLayout; +import android.widget.HeaderViewListAdapter; import android.widget.ListAdapter; import android.widget.ListView; @@ -343,4 +345,73 @@ public void setEmptyViewInternal(View emptyView) { } + // zhangmao add the code below for bug 4374 2015-01-04 + + private int getHeadersHeight() { + int headersHeight = 0; + ListAdapter listAdapter = getRefreshableView().getAdapter(); + if (listAdapter instanceof HeaderViewListAdapter) { + HeaderViewListAdapter headerViewListAdapter = ((HeaderViewListAdapter) listAdapter); + int headerCount = headerViewListAdapter.getHeadersCount(); + for (int i = 0; i < headerCount; i++) { + View view = headerViewListAdapter.getView(i, null, null); + headersHeight += view.getMeasuredHeight(); + } + } + return headersHeight; + } + + @Override + protected boolean isReadyForPullStart() { + if (getHeadersHeight() > getHeight()) { + return isScrolledToTop(); + } else { + final Adapter adapter = mRefreshableView.getAdapter(); + if (null == adapter || adapter.isEmpty()) { + return true; + } else { + return isScrolledToTop(); + } + } + } + + private boolean isScrolledToTop() { + if (mRefreshableView.getFirstVisiblePosition() <= 1) { + final View firstVisibleChild = mRefreshableView.getChildAt(0); + if (firstVisibleChild != null) { + return firstVisibleChild.getTop() >= mRefreshableView.getTop(); + } + } + return false; + } + + @Override + protected boolean isReadyForPullEnd() { + if (getHeadersHeight() > getHeight()) { + return isScrolledToBottom(); + } else { + final Adapter adapter = mRefreshableView.getAdapter(); + if (null == adapter || adapter.isEmpty()) { + return true; + } else { + return isScrolledToBottom(); + } + } + } + + private boolean isScrolledToBottom() { + final int lastItemPosition = mRefreshableView.getCount() - 1; + final int lastVisiblePosition = mRefreshableView.getLastVisiblePosition(); + + if (lastVisiblePosition >= lastItemPosition - 1) { + final int childIndex = lastVisiblePosition - mRefreshableView.getFirstVisiblePosition(); + final View lastVisibleChild = mRefreshableView.getChildAt(childIndex); + if (lastVisibleChild != null) { + return lastVisibleChild.getBottom() <= mRefreshableView.getBottom(); + } + } + + return false; + } + }