您的位置:首页 > 移动开发 > Android开发

Android-PullToRefresh 进入自动刷新 终极解决方法

2016-07-22 14:43 507 查看
最近打算自己写一个框架,于是就用volley+Android-PullToRefresh  ,但是使用Android-PullToRefresh  想实现进入页面自动实现下拉刷新 mPullRefreshListView.setRefreshing(true);  一直没有效果,在网上看了看 ,很多人说view 还没有生成,所以没有效果,才去延时下拉就有效果

new Handler().postDelayed(new Runnable() {

@Override
public void run() {
mPullRefreshListView.setRefreshing();
}
}, 3000);

添加此代码后发现,时间很难控制,效果很差。
故自己研究一下:

@Override
public final void setRefreshing(boolean doScroll) {
if (!isRefreshing()) {
setState(State.MANUAL_REFRESHING, doScroll);
}
}
final void setState(State state, final boolean... params) {
mState = state;
if (DEBUG) {
Log.d(LOG_TAG, "State: " + mState.name());
}

switch (mState) {
case RESET:
onReset();
break;
case PULL_TO_REFRESH:
onPullToRefresh();
break;
case RELEASE_TO_REFRESH:
onReleaseToRefresh();
break;
case REFRESHING:
case MANUAL_REFRESHING:
onRefreshing(params[0]);
break;
case OVERSCROLLING:
// NO-OP
break;
}

// Call OnPullEventListener
if (null != mOnPullEventListener) {
mOnPullEventListener.onPullEvent(this, mState, mCurrentMode);
}
}

protected void onRefreshing(final boolean doScroll) {
if (mMode.showHeaderLoadingLayout()) {
mHeaderLayout.refreshing();
}
if (mMode.showFooterLoadingLayout()) {
mFooterLayout.refreshing();
}

if (doScroll) {
if (mShowViewWhileRefreshing) {

// Call Refresh Listener when the Scroll has finished
OnSmoothScrollFinishedListener listener = new OnSmoothScrollFinishedListener() {
@Override
public void onSmoothScrollFinished() {
callRefreshListener();
}
};

switch (mCurrentMode) {
case MANUAL_REFRESH_ONLY:
case PULL_FROM_END:
smoothScrollTo(getFooterSize(), listener);
break;
default:
case PULL_FROM_START:
smoothScrollTo(-getHeaderSize(),listener);
break;
}
} else {
smoothScrollTo(0);
}
} else {
// We're not scrolling, so just call Refresh Listener now
callRefreshListener();
}
}


断点后发现,刚进入页面是View 未生成 ,-getHeaderSize()==0 所以没有下滑, 自然而然,只要-给etHeaderSize()正确的值,下拉刷新自然可以完成,所以添加此逻辑

smoothScrollTo((-getHeaderSize()==0)?(-loadingSize):(-getHeaderSize()), listener);   即可,loadingSize自己算即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息