Android SwipeRefreshLayout 自动刷新

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,856评论 25 709
  • 本文算是对之前的一篇博文《自个儿写Android的下拉刷新/上拉加载控件》的续章,如果有兴趣了解更多的朋友可以先看...
    Machivellia阅读 8,880评论 8 70
  • 一对夫妻最最无奈的可能是最后发现除了孩子,两个人之间什么都没有,为了孩子无法分开,可是在一起确实折磨,没有亲密的生...
    枯朵阅读 1,729评论 0 1
  • 每个周五的下午台湾老师的课,总会先给我们读一篇台湾文学作品,用他的话来说,先用小菜开开胃,毕竟接下来要学习的中国经...
    卖糖果的小女巫阅读 1,105评论 0 0
  • 东伯雪鹰刚开始还有强烈的情绪波动,毕竟这是一份大宝藏,可很快他恢复了冷静,因为这样的结果也在他的预料中,作为一个星...
    im喵小姐阅读 2,880评论 0 0