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);
}
}
断点后发现,刚进入页面是View 未生成 ,-getHeaderSize()==0 所以没有下滑, 自然而然,只要-给etHeaderSize()正确的值,下拉刷新自然可以完成,所以添加此逻辑
smoothScrollTo((-getHeaderSize()==0)?(-loadingSize):(-getHeaderSize()), listener); 即可,loadingSize自己算即可
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自己算即可
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树