我已经实现了一个具有 SwipeRefreshLayout 作为内容视图的片段。刷新动画在 onRefresh 时触发,但即使在从服务器检索数据后将 setRefreshing 设置为 false,刷新动画也不会停止。
@Override
public void onRefresh() {
handler.post(refreshing);
}
private final Runnable refreshing = new Runnable(){
public void run(){
try {
if(isRefreshing()){
handler.postDelayed(this, 1000);
}else{
swipeLayout.setRefreshing(false);
mainActivity.forceUpdate();
setLayout();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
};
private boolean isRefreshing(){
return swipeLayout.isRefreshing();
}
好吧,当然不是停下来刷新,看看你的循环。
if(isRefreshing()){
handler.postDelayed(this, 1000);
}else{
swipeLayout.setRefreshing(false);
mainActivity.forceUpdate();
setLayout();
}
基本上你永远不会停止它,
“swipeLayout.setRefreshing(false);”
永远不会被调用,因为它需要的条件是 (isRefreshing()) 为假,所以它没有任何意义,你总是会从“isRefreshing()”得到一个真值,因为你永远不会告诉它停止。
在我看来,基于 isRefreshing 的布尔值将 Refreshing 设置为 false 是错误的,您不应该依赖它,您应该决定何时停止刷新状态。
通常 PullToRefresh 用于从服务器获取新数据。
所以基本上我建议在您从服务器得到答案的地方插入此检查:
if (swipeLayout.isRefreshing()) {
swipeLayout.setRefreshing(false);
}
因为一旦您从服务器获取新数据,就需要停止刷新。
编辑-添加了完整的代码示例
protected SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
retrieveDocuments();
}
};
public void retrieveDocuments() {
//some code, server call
//onCompletion is your server response with a success
@Override
public void onCompletion(String result) {
if (mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(false);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)