18

I previously was using API 19 and was using SwipeRefreshLayout for many of my fragments. When I loaded content for the first time previously, I was using the setRefreshing(true); and was able to load content and it worked fine.

I'm noticing in Android 5.0 Google is using a circular progress view. When I call setRefreshing(true); now it simply has no effect. Is there anyway to programmatically show the new spinner? I've delved in to this quite a bit but not able to programmatically show it. I have read the following on this:

http://developer.android.com/tools/support-library/index.html

https://yassirh.com/2014/05/how-to-use-swiperefreshlayout-the-right-way/

SwipeRefreshLayout doesn't show any indicator of refreshing

Basically, it shows no indication of refreshing on the first try.

4

6 回答 6

30

而不是直接设置

getSwipeRefreshLayout().setRefreshing(true);

您可以在 UI 线程上延迟它以供以后使用

getSwipeRefreshLayout().post(new Runnable() {
    @Override public void run() {
        getSwipeRefreshLayout().setRefreshing(true);
    }
});

这对我来说非常适合开始加载onCreateView,如果LoaderManager.LoaderCallbacks也完成的话。

我没有看到进度条意外卡住(因为数据加载太快),但如果您怀疑加载可能过早返回(错误?),值得

getSwipeRefreshLayout().setRefreshing(false);

这样两个posts 肯定会一个接一个地出现,导致一个绝对隐藏的进度视图。

于 2014-11-15T15:17:52.273 回答
1

这不是一个非常干净的解决方案,但它现在可以工作。setRefreshing(boolean)进度视图位于操作栏后面。解决办法是把它往下推:

    Display display = getActivity().getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int height = size.y;
    getSwipeRefreshLayout().setProgressViewOffset(false, -200, height / 9);

如果您有更好的解决方案,请在下面发布,我会接受!

请不要使用此解决方案,接受的答案更好。

于 2014-10-28T22:17:44.943 回答
0

您要记住的是,Material Design SwipeRefreshLayout 发生了变化,而旧的使用了 BakedBezierInterpolator,而新的使用了“拖入位置”进度微调器

不幸的是,API 21 不再包含 BakedBezierInterpolator,所以从我的角度来看,您有 2 个选项:1)将微调器向下移动(并记住之后再将其向上移动)2)让您自己的微调器坐在屏幕上您最初是在加载数据

如果你想让你的微调器保持不变,那么一定要使用 SwipeRefreshLayout 之一,但要确保你记得重新定位它

我希望这在某种程度上有所帮助......

于 2014-10-29T20:12:22.890 回答
0

您可以尝试在 setRefreshing(true) 之前调用 measure(int, int) 方法

看看https://stackoverflow.com/a/26692841/2114930

于 2014-11-02T18:31:40.123 回答
0

我遇到了同样的问题,但仅在使用StickyListHeadersListView. 使用android.widget.ListView,一切正常。

我认为在 api 21 中,Google 已经重写了 Listview 类。如果您使用 Listview 子类,我想您可能需要subclass exends android.widget.ListView在 api 21 中制作。

于 2014-10-29T04:51:32.163 回答
0

KVISH,请查看我的回答: SwipeRefreshLayout 没有显示任何刷新指示

方法是在 ScrollView 小部件中添加您的视图。如果您使用 AppCompat Library v21.0.3,它应该可以工作。

于 2015-03-04T19:21:41.617 回答