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的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值