谷歌提供的官方下拉刷新控件 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);
}
});
以上三种方法,都经过本人测试,都可以达到效果。个人觉得,后两种比较好用。