比如我想用SwipeRefreshLayout在界面第一次加载进来时先自动刷新一次。
private SwipeRefreshLayout mRefreshLayout;
mRefreshLayout.setRefreshing(true);
这样不起作用,显示不出加载条。
但是交给handler就可以?
private SwipeRefreshLayout mRefreshLayout;
mHandler.post(new Runnable() {
@Override
public void run() {
mRefreshLayout.setRefreshing(true);
}
});
先转载知乎一个答案,这里解释了为什么在onCreate中调用setRefreshing无效:
作者:小波
链接:https://www.zhihu.com/question/35422150/answer/62784161
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
既然是因为在我们调用setRefresh时view的初始化还未执行完毕,那么最简单的办法就是用post加入队列,随便写了个demo,上代码:
需要注意的是,setRefreshing只是展示动画,想要自动刷新必须手动调用onRefresh;手动调用onRefresh必须在post的runnable中,位于setRefreshing之后,否则若onRefresh中任务执行过快,就会出现无法取消refresh动画的情况。
应该和Activity的生命周期有关。放在Handler里可以保证页面初始化完了以后正确刷新。
SwipeRefreshLayout在没有完全加载前,refresh是不起作用的,可以看一下源代码。