看這個解決方法的前提是你已經使用過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的方法。