最近项目中用到了下拉刷新,找了一个比较好用的第三方库PullToRefresh_library,点击打开链接。在使用过程中遇到了需要自动出现刷新状态(而不是手动向下滑动)的需求,在网上找到了两种方法:
第一种是官方api提供的 public final void setRefreshing() 方法,使用过后发现没作用。
第二种是网上说的
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
<span style="white-space:pre"> </span>mPullToRefreshScrollView.setRefreshing();
}
}, 3000);
这种方法我没试过,网上是说还未获取到头部刷新布局的高度,不过延迟时间根据手机而异。
我个人想出来一个办法,通过看PullToRefreshBase的onTouchEvent()方法中的代码,我们可以用一个线程来模拟手指向下拉的动作,通过handler来刷新高度。
在
PullToRefreshBase.java中添加以下代码:
public final void autoRefreshing(){
mCurrentMode = Mode.PULL_FROM_START;
mInitialMotionY = 0;
mLastMotionY = 0;
new Thread(){
public void run() {
while(true){
handler.sendEmptyMessage(100);
if(mLastMotionY > 300){
break;
}
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
handler.sendEmptyMessage(101);
}
}.start();
}
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what == 100){
mLastMotionY += 10;
pullEvent();
}else if (msg.what == 101){
if(!isRefreshing()){
<span style="white-space:pre"> </span>setState(State.REFRESHING, true);
}
}else{
setState(State.RESET);
}
}
};
以上代码高度 300,10是随便写的高度,我们可以根据手机的像素来计算,sleep的时间也可以根据你自己的需要更改。
调用的时候直接使用 .autoRefreshing()就可以了。
第一次写博客,写得不好,请见谅!