SwipeRefreshLayout在onCreate使用setRefreshing(true)无效

今天把项目中的下拉刷新改为android官方SwipeRefreshLayout,在onCreate中调用setRefreshing(true)竟然没有小圆圈出现,让我很奇怪,于是决定看看setRefreshing的源码。

public void setRefreshing(boolean refreshing) {
    if (refreshing && mRefreshing != refreshing) {
        // scale and show
        mRefreshing = refreshing;
        int endTarget = 0;
        if (!mUsingCustomStart) {
            endTarget = (int) (mSpinnerFinalOffset + mOriginalOffsetTop);
        } else {
            endTarget = (int) mSpinnerFinalOffset;
        }
        setTargetOffsetTopAndBottom(endTarget - mCurrentTargetOffsetTop, 
               true /* requires update */); 
       mNotify = false;
        startScaleUpAnimation(mRefreshListener);
    } else {
        setRefreshing(refreshing, false /* notify */);
    }}

首先是一个判断,关键在于mRefreshing是不是false,看了下代码,mRefreshing默认为false的。
然后就是setTargetOffsetTopAndBottom方法了。可以看下方法的源代码。

private void setTargetOffsetTopAndBottom(int offset, boolean requiresUpdate) {
    mCircleView.bringToFront();
    mCircleView.offsetTopAndBottom(offset);
    mCurrentTargetOffsetTop = mCircleView.getTop();
    if (requiresUpdate && android.os.Build.VERSION.SDK_INT < 11) {
        invalidate();
    }}

可以看出代码是确定小圆圈的位置。
mCurrentTargetOffsetTop是在onMeasure中确定的,所以小圆圈要在SwipeRefreshLayout绘制完后才能调用,可以用view自带的post方法来调用setRefreshing(true)就可以了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,854评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,792评论 0 17
  • 好长时间了,我们都没有再联系,昨天她忽然来电告诉我:她要离婚了! 01 对于她离或不离,我已经...
    易梦的原野阅读 346评论 2 2
  • 倒计时80天要再审视一下目前的复习阶段和接下来的步骤了。 【英语】单词不能挺每天都要读;阅读差不多了二刷的时候要尝...
    Rutona阅读 151评论 0 0