I'm using android.support.v4.widget.SwipeRefreshLayout
with android.support.v7.widget.RecyclerView
.
On fragment view creation I need to show SwipeRefreshLayout
animation. But when I call setRefreshing(true)
nothing happens. But when I refresh data animation changes.
I suppose that the animation isn't showing without child inside SwipeRefreshLayout
.
How to show this animation in the best way?
相关问题
- How can I create this custom Bottom Navigation on
- Bottom Navigation View gets Shrink Down
- How to make that the snackbar action button be sho
- Listening to outgoing sms not working android
- How to create Circular view on android wear?
相关文章
- android开发 怎么把图片放入drawable的文件夹下
- android上如何获取/storage/emulated/下的文件列表
- androidStudio有个箭头不认识
- SQLite不能创建表
- Windows - Android SDK manager not listing any plat
- Animate Recycler View grid when number of columns
- Why is the app closing suddenly without showing an
- Android OverlayItem.setMarker(): Change the marker
This is a reported bug (reported here) and a workaround is available:
SwipeRefreshLayout must contain a child to work properly. Make sure you initialize it before using it anywhere!
you must call
setRefreshing(true)
afteronDraw()
, else it would not display animation.so, in Activity, you can do it in
onCreate()
, like this:in fragment, you can put these codes in
onActivityCreated()
.Thanks, guys.
I`ve just realised that the easiest solution is to call method measure(int, int) with non-zero values) before calling setRefreshing(true). The problem is happening because setRefreshing(true) is calling before onMeasure.
So you need to call:
It depends on which API level you're building under - if you're using up to API 20 then you can just turn on setRefreshing(true), this will run the animation in the ActionBar, but in API 21 (Material Design) they changed the progress to be a spinner than is "pulled into view" before it spins
You have 2 ways of getting around this in API 21: 1) shift the spinner down with setProgressViewOffset(), but remember to shift it back up afterwords (note that this works in px, while setDistanceToTriggerSync() uses dp) 2) make a duplicate spinner that is displayed when you're loading the data
The more code-efficient solution is to use the existing spinner, but you have to be careful that you do reset its position
If you need to calculate the pixel density, you can grab it from: