SwipeRefreshLayout trigger programmatically

Niklas picture Niklas · Jul 5, 2014 · Viewed 34k times · Source

Is there any way to trigger the SwipeRefreshLayout programmatically? The animation should start and the onRefresh method from the OnRefreshListener interface should get called.

Answer

Ramz picture Ramz · Jan 17, 2015

if you are using the new swipeRefreshLayout intoduced in 5.0 enter image description here

As the image shown above you just need to add the following line to trigger the swipe refresh layout programmatically

Work

in Java:

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

on in Kotlin:

mSwipeRefreshLayout.post { mSwipeRefreshLayout.isRefreshing = true }

NOT work

if you simply call in Java:

 mSwipeRefreshLayout.setRefreshing(true);

or in Kotlin

 mSwipeRefreshLayout.isRefreshing = true

it won't trigger the circle to animate, so by adding the above line u just make a delay in the UI thread so that it shows the circle animation inside the ui thread.

By calling mSwipeRefreshLayout.setRefreshing(true) the OnRefreshListener will NOT get executed

In order to stop the circular loading animation call mSwipeRefreshLayout.setRefreshing(false)