在API 21中的SwipeRefreshLayout

我以前使用API​​ 19,并使用SwipeRefreshLayout为我的许多片段。 当我第一次加载内容时,我正在使用setRefreshing(true); 并能够加载内容,它工作正常。

我注意到Android 5.0 Google正在使用循环进度视图。 当我调用setRefreshing(true); 现在它根本没有效果。 是否有编程方式显示新的微调? 我已经深入了解了这一点,但不能以编程方式显示它。 我已经阅读了以下内容:

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

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

SwipeRefreshLayout不显示任何刷新指标

基本上,第一次尝试没有提示清爽。

Solutions Collecting From Web of "在API 21中的SwipeRefreshLayout"

而不是直接设置

 getSwipeRefreshLayout().setRefreshing(true); 

您可以在UI线程上稍后将其延迟

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

这完全适用于我开始在onCreateView加载,如果在LoaderManager.LoaderCallbacks完成。

我还没有看到进度条意外地粘住(因为数据加载太快),但是如果您怀疑加载可能返回太早(错误?), 那么值得做相同的发布

 getSwipeRefreshLayout().setRefreshing(false); 

这样两个post肯定会一个接一个地来到,导致一个肯定隐藏的进度视图。

这不是一个非常干净的解决scheme,但它现在工作。 setRefreshing(boolean)进度视图在动作栏的后面。 解决办法是把它推下去:

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

如果您有更好的解决scheme,请在下面张贴,我会接受的!

请不要使用这个解决scheme,接受的答案比较好。

我遇到了同样的问题,但只有在使用StickyListHeadersListView的情况下。 使用android.widget.ListView ,一切都OK。

我想在api 21中,Google已经重写了Listview类,如果你使用的是Listview子类,那么我猜你可能需要让subclass exends android.widget.ListView在api subclass exends android.widget.ListView

你必须记住的是材质deviseSwipeRefreshLayout已经改变,而旧的使用BakedBezierInterpolator,但新的使用“拖入位置”进度微调

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

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

我希望这有助于某种方式…

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

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

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

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