当我向上滑动以刷新ListView时,我使用performClick()执行单击,但是轮子会冻结,直到执行onClickListener下的所有内容。
btini.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Code here
refreshlistmain.setRefreshing(false);
refreshlistmain.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
btini.performClick();
}
}
);
由于onClick()下的代码很长,因此轮子在消失之前会保持冻结状态几秒钟。
我该如何解决?
答案 0 :(得分:0)
此代码安排错误。这是一个递归调用。每次点击都会注册一个新的SwipeRefreshLayout.OnRefreshListener
。就像下面一样使用它。执行长时间运行的任务,然后最后调用refreshlistmain.setRefreshing(false);
。如果长时间运行的任务在工作线程上,那么您需要等待它完成。
btini.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do stuff
refreshlistmain.setRefreshing(false);
}
});
refreshlistmain.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
btini.performClick();
}
}
);
答案 1 :(得分:0)
这是因为你在UI线程上有一些很长的任务。它不仅不会冻结SwipeToRefreshLayout
,也不会冻结任何动画或ProgressBar
你得到的动画。
<强>解决方案强>
在AsyncTask或其他主题中放置您的任务(按钮点击后您正在执行的操作)。哪个将以异步方式运行。