PullScrollView,PullListView, PullGridView 等進入自動下拉刷新

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

發佈了37 篇原創文章 · 獲贊 26 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章