谷歌提供的官方下拉刷新控件SwipeRefreshLayout,用起来很方便,很实用,也很漂亮,那么我们有什么理由不用呢? 我们正常的时候,都是手动下拉刷新,更新数据,然后停止刷新。但是,有时候我们会有进入页面自动刷新的需求,那么SwipeRefreshLayout可以实现吗?答案是肯定的。 于是,我兴奋的去实现了:
layout_refresh.setRefreshing(true);
然而,我发现在onCreate()方法中直接调用这个方法没有任何的效果。网上提供了几种解决方案。

1、利用反射实现

public static void setRefreshing(SwipeRefreshLayout refreshLayout,boolean refreshing, boolean notify){ Class<? extends SwipeRefreshLayout> refreshLayoutClass =   refreshLayout.getClass(); if (refreshLayoutClass != null) { try { Method setRefreshing = refreshLayoutClass.getDeclaredMethod("setRefreshing", boolean.class, boolean.class); setRefreshing.setAccessible(true); setRefreshing.invoke(refreshLayout, refreshing, notify); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } 然后,这样来调用:setRefreshing(layout_refresh,true,true);

2、利用延时实现

打开刷新动画和取消刷新动画都延时500ms。 开始刷新:
new Handler().postDelayed(new Runnable() { layout_refresh.setRefreshing(true); }, 500); //延迟500ms执行
结束刷新:
new Handler().postDelayed(new Runnable() { layout_refresh.setRefreshing(false); }, 500); //延迟500ms执行

3、利用post方法

开始刷新:
layout_refresh.post(new Runnable() { @Override public void run() { layout_refresh.setRefreshing(true); } });
结束刷新:
layout_refresh.post(new Runnable() { @Override public void run() { layout_refresh.setRefreshing(false); } });
以上三种方法,都经过本人测试,都可以达到效果。个人觉得,后两种比较好用。