我之前使用的是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 doesn't show any indicator of refreshing
基本上,它在第一次尝试时没有显示任何刷新的迹象。
答案 0 :(得分:30)
而不是直接设置
getSwipeRefreshLayout().setRefreshing(true);
您可以在UI线程上将其延迟以供日后使用
getSwipeRefreshLayout().post(new Runnable() {
@Override public void run() {
getSwipeRefreshLayout().setRefreshing(true);
}
});
这对我来说非常适合我开始加载onCreateView
,如果在LoaderManager.LoaderCallbacks
中完成加载。
我还没有看到进度条意外粘贴(因为数据加载速度太快),但是如果您怀疑负载可能过早返回(错误?)它值得为
做同样的发布getSwipeRefreshLayout().setRefreshing(false);
这样两个post
肯定会一个接一个地出现,从而产生一个明确隐藏的进度视图。
答案 1 :(得分: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);
如果您有更好的解决方案,请在下面发布,我会接受它!
请不要使用此解决方案,接受的答案会更好。
答案 2 :(得分:0)
我遇到了同样的问题,但仅限于使用StickyListHeadersListView
的情况。
使用android.widget.ListView
,一切正常。
我认为在api 21中,Google重写了Listview类。
如果您正在使用Listview子类,我猜您可能需要在api 21中创建subclass exends android.widget.ListView
。
答案 3 :(得分:0)
你必须记住的是,Material Design SwipeRefreshLayout已经改变了,而旧的使用了BakedBezierInterpolator,但是新的使用了“拖入位置”进度微调器
不幸的是,API 21不再包含BakedBezierInterpolator,因此从我的角度来看,您有两个选择: 1)将旋转器向下移动(并记住之后将其向后移动) 2)在您最初加载数据时,让自己的微调器停留在屏幕上
如果你想保持你的微调器相同,那么一定要使用SwipeRefreshLayout,但要确保你记得重新定位它
我希望这在某种程度上有所帮助......
答案 4 :(得分:0)
您可以尝试在setRefreshing(true)
之前调用measure(int,int)方法答案 5 :(得分:0)
KVISH,请查看我的回答: SwipeRefreshLayout doesn't show any indicator of refreshing
方法是在ScrollView小部件中添加视图。如果你使用AppCompat Library v21.0.3,它应该可以工作。