Android SwipeRefreshLayout 自动刷新

调用Android的SwipeRefreshLayout 的setRefreshing() 方法,本以为可以完成像知乎客户端的自动刷新,可是并没有,在网上找了一下问题的所在

Android SwipeRefreshLayout 自动刷新_第1张图片
Paste_Image.png

这里的mOriginalOffsetTop参数是在onMeasure方法中获取的,在onMeasure没有调用的时候mOriginalOffsetTop是没有值得,所以按照这个思路去处理这个问题。既然onMeasure没有执行,我们就保证让onMeasure执行之后再去setRefreshing()

所以代码可以这样写

public class SwipeRefresh extends SwipeRefreshLayout
{
    private boolean mMeasured = false;
    private boolean mRefresh = false;

    public SwipeRefresh(Context context)
    {
        super(context);
    }

    public SwipeRefresh(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        if (!mMeasured) {
            mMeasured = true;
            setRefreshing(mRefresh)
        }
     
    }

    @Override
    public void setRefreshing(boolean refreshing)
    {
        if (mMeasured) {
            super.setRefreshing();
        }
        else{
            mRefresh = refreshing;
        }
    }
}

这样, 问题就解决了


XRecyclerView 与 SwipeRefreshLayout一起用会有坑, XRecyclerView自己实现了上下拉的监听,把XRecyclerView做为SwipeRefreshLayout的子view,SwipeRefreshLayout就判断不了下拉事件了,从这个问题上卡主好久。
提供一个CoordinatorLayout 的动画,像钉钉上面的titleBar一样的动画
https://github.com/saulmm/CoordinatorBehaviorExample

你可能感兴趣的:(Android SwipeRefreshLayout 自动刷新)