我试图使用刷刷新布局来更新一些数据。除了一个我似乎解决不了的小错误外,一切正常。
当我拉到刷新时,动画就被冻结了。
我是这样实施的:
myRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// Do some stuff
// Sleep as a demonstrator of the issue
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
myRefreshLayout.setRefreshing(false);
}
});也尝试过这样做:
myRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
myRefreshLayout.post(new Runnable() {
@Override
public void run() {
// Do some stuff
// Sleep as a demonstrator of the issue
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
myRefreshLayout.setRefreshing(false);
}
});
}
});
}
});但是动画一直被冻结,直到一切都完成,然后它就消失了(因为它击中了setRefreshing(false))。
在搜索了一点之后,我想可能是UI在等待这些东西完成,所以我尝试以如下方式实现它:
myRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Thread(new Runnable() {
@Override
public void run() {
// Do some stuff
// Sleep as a demonstrator of the issue
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
myRefreshLayout.setRefreshing(false);
}
});
}
});
}
});
}在这种情况下,刷新指示符永远不会消失,所以我想它不是调用runOnUiThread,而是用主活套(处理程序)而不是具有相同效果的runOnUiThread调用相同的东西。
有什么简单的方法来实现这一点吗?我是不是漏掉了一些细节?
我尝试了上面描述的步骤,我还查看了Stack溢出类似的问题,但都没有效果。
谢谢!
发布于 2022-11-26 15:53:24
对后台线程执行刷新操作,在主线程上执行setRefreshing(false)操作是正确的。问题是,您忘记在新线程之后调用start()。
myRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Thread(new Runnable() {
@Override
public void run() {
// Do some stuff
// Sleep as a demonstrator of the issue
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
myRefreshLayout.setRefreshing(false);
}
});
}
}).start();// start the thread here
}
});
}https://stackoverflow.com/questions/74582709
复制相似问题