SwipeRefreshLayout没有进度旋转器

8

是否可以在不显示进度旋转器的情况下执行SwipeRefreshLayout功能。现在,它的默认行为是进行下拉刷新时,显示进度旋转器和调用onRefresh()方法。但我希望完全隐藏它,只想使用下拉刷新功能,但不显示进度旋转器。

6个回答

21

经过一些研究和开发,找到了一个解决方案,可以帮助其他想要实现这种功能的人。

 try {
        Field f = mSwipeRefreshLayout.getClass().getDeclaredField("mCircleView");
        f.setAccessible(true);
        ImageView img = (ImageView)f.get(mSwipeRefreshLayout);
        img.setAlpha(0.0f);
    } catch (NoSuchFieldException | IllegalAccessException e) {
        e.printStackTrace();
    }

1
我得到了“在类Landroid/support/v4/widget/SwipeRefreshLayout中没有mCircleView字段”的错误。 - jitendra purohit
1
@jitendrapurohit 确保你的RefreshLayout不是子类。如果是,你需要执行以下操作:mSwipeRefreshLayout.getClass().getSuperclass().getDeclaredField("mCircleView"); - KING

3

swipeRefreshLayout.setProgressViewEndTarget(false, 0)

滑动刷新控件设置进度视图结束的目标值为0,并且不显示。

非常感谢,我甚至使用Kotlin也能工作。 - MRamzan
1
这样可以防止第二次及以后加载列表。 - Abdulmajeed Alyafei

0

除了Atakan Akar的回答之外,为了启用未来的轻扫刷新:

// Reduses spinner size to 0
swipeRefreshLayout.setProgressViewEndTarget(false, 0); 
// Turns off layout refreshing status
swipeRefreshLayout.setRefreshing(false);

0

我不同意完全隐藏这个旋转器,但在加载开始之前隐藏它。 我的布局中有许多正在进行的UI界面.. 所以我已经做了这个:

app:refreshing="@{vm.loadingUI1  && vm.loadingUI2  && false}">

loadingUI1 是 LiveData

采用这种方法,您只需将交互式加载显示为操作,并在任何组件开始加载过程时立即隐藏它。


0

你可以将加载器发送离开

yourSwipeToRefresh?.setProgressViewEndTarget(true, -screenHeight)

-1

swipe_refresh_layout.setProgressViewOffset( false, -200, -200 )


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接