From 10491e85aa36298d6f04b4b6f24ea44fdd7a44cd Mon Sep 17 00:00:00 2001 From: zhangmao Date: Mon, 4 Jan 2016 18:58:54 +0800 Subject: [PATCH] =?UTF-8?q?bug!4374@=E4=B9=8C=E6=9D=BE=E7=8F=88#=E3=80=90?= =?UTF-8?q?=E5=AE=89=E5=8D=93=E3=80=91=E7=A4=BE=E5=8C=BA=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E4=B8=8A=E6=BB=91=E5=88=87=E6=8D=A2=E5=A5=BD=E8=AF=84=E5=90=8E?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E9=A1=B5=E9=9D=A2=E9=A1=B6=E9=83=A8=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E4=B8=8D=E5=AE=8C=E6=95=B4=E4=BA=86=EF=BC=8C=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E6=97=A0=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 8 ++- library/build.gradle | 4 +- .../library/PullToRefreshListView.java | 71 +++++++++++++++++++ 3 files changed, 80 insertions(+), 3 deletions(-) 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; + } + }