看这个解决方法的前提是你已经使用过pull_library的架包
关于这个问题,开始我查过资料发现都不是很理想,下边通过自己研究整理出一个解决方案供参考,如有更好的方法欢迎交流指正。
其实PullScrollView,PullListView,PullGridView等下拉自动刷新都是类似的,下边就以PullScrollView为例说明,废话不多说,直接上代码:
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
public class CustomPullToRefreshScrollView extends PullToRefreshScrollView{
/**
* 默认等待时间
*/
private static final long DEFAULT_DELAYMILLIS = 300;
private Handler handler;
public CustomPullToRefreshScrollView(Context context) {
super(context);
}
public CustomPullToRefreshScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomPullToRefreshScrollView(Context context, Mode mode) {
super(context, mode);
}
public CustomPullToRefreshScrollView(Context context, Mode mode, AnimationStyle style) {
super(context, mode, style);
}
/**
* 首次进入实现自动刷新
* @author ttarfall
* @date 2015-7-10 下午4:40:01
*/
public void setAutoRefreshing() {
setAutoRefreshing(DEFAULT_DELAYMILLIS);
}
/**
* 自动下拉刷新
* @author ttarfall
* @date 2015-7-20 2015-7-20
* @param delayMillis 自动启动前等待时间
*/
public void setAutoRefreshing(long delayMillis) {
setRefreshing(delayMillis, Mode.PULL_FROM_START);
}
/**
* 设置自动上拉刷新
* @author ttarfall
* @date 2015-8-10 上午10:02:02
*/
public void setAutoUpRefreshing() {
setAutoUpRefreshing(DEFAULT_DELAYMILLIS);
}
/**
* 自动上拉刷新
* @author ttarfall
* @date 2015-8-10 上午10:15:38
* @param delayMillis 等待时间
*/
public void setAutoUpRefreshing(long delayMillis) {
setRefreshing(delayMillis, Mode.PULL_FROM_END);
}
private void setRefreshing(long delayMillis, Mode mode) {
if(delayMillis<DEFAULT_DELAYMILLIS)
delayMillis = DEFAULT_DELAYMILLIS;
getHeaderAndFooter(delayMillis, mode);
}
/**
* 根据状态决定是否启动自动刷新
* @param delayMillis
* @param mode
*/
private void getHeaderAndFooter(long delayMillis, final Mode mode){
if (handler == null)
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
switch (mode) {
case PULL_FROM_START:
if (getHeaderSize() == 0) {
getHeaderAndFooter(DEFAULT_DELAYMILLIS, mode);
} else {
startRefreshing(DEFAULT_DELAYMILLIS, mode);
}
break;
case PULL_FROM_END:
if (getFooterSize() == 0) {
getHeaderAndFooter(DEFAULT_DELAYMILLIS, mode);
} else {
startRefreshing(DEFAULT_DELAYMILLIS, mode);
}
break;
default:
break;
}
}
}, delayMillis);
}
/**
* 启动自动刷新
* @param delayMillis
* @param mode
*/
private void startRefreshing(long delayMillis, final Mode mode){
if (handler == null)
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
switch (mode) {
case PULL_FROM_START:
setCurrentMode(mode);
smoothScrollTo(-getHeaderSize() * 2);
setRefreshing();
break;
case PULL_FROM_END:
setCurrentMode(mode);
smoothScrollTo(getFooterSize() * 2);
setRefreshing();
break;
default:
break;
}
}
}, delayMillis);
}
}
在Activity中代码:
refreshScrollView=(CustomPullToRefreshScrollView)findViewById(R.id.refreshScrollView);
refreshScrollView.setAutoRefreshing();
“`
注意:这里在PullToRefreshBase添加setCurrentMode的方法。