gpt4 book ai didi

android - SwipeRefreshLayout 刷新动画不会停止

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:47:09 25 4
gpt4 key购买 nike

我已经实现了一个将 SwipeRefreshLayout 作为内容 View 的 fragment 。刷新动画在 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 的 bool 值将 setRefreshing 设置为 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);
}
}

}

关于android - SwipeRefreshLayout 刷新动画不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com