如何使 postDelayed 按预期工作?
How to make postDelayed work as intended?
这是我在大多数 SwipeRefreshLayout 教程中找到的方法,但对我来说它似乎完全愚蠢。
它的作用:它在实际执行 doStuff() 之前执行 2000 毫秒的刷新动画。
我(显然!!)想做的事:在执行 doStuff() 时刷新动画然后停止。无需计时器!难道我做错了什么 ?网上告诉我不...
view.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeEmptyView.setRefreshing(true);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doStuff();
swipeEmptyView.setRefreshing(false);
}
}, 2000);
}
});
您的评论的回复应该是一个答案。
http 请求的重点是 运行 后台的一项艰苦工作,这就是 AsyncTask 的设计目的。否则,您将在 Mainthread 上遇到 运行ning 网络请求异常,请 Google 了解更多。
关于 SwipeRefreshLayout,我认为它会自动显示加载动画,直到您调用 mSwipeLayout.setRefreshing(false)。所以这里有2种实现:
2.1 - 使用 AsyncTask 进行 http 请求,使用您自己的加载动画(有或没有 SwipeRefreshLayout):
public class MyAsyncTask<DummyStuff> extends AsyncTask<Void, Void, Void> {
public void onPreExecute() {
// start your animation here
// NOTE: if you use SwipeRefreshLayout, it will automatically show animation when you swipe your layout down, so please consider your UX to do what you want.
}
public void onDoinBackground(Void... input) {
// do something
// http request or something
return null; // return what ever you get
}
public void onPostExecute(Void... result) {
// stop your animation here
// in case you use SwipeRefreshLayout, call mSRL.setRefreshing(false) here too.
}
}
2.2 使用您的 SwipeRefreshLayout 在任务上方的用户:
我只展示重要的部分:
mSRL.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
(new MyAsyncTask()).execute();
}
});
以上只是关于应该在哪里做什么的想法,请自行尝试。
我稍后会用真实样本更新这个答案。但我希望你能明白这里的意思。
这是我在大多数 SwipeRefreshLayout 教程中找到的方法,但对我来说它似乎完全愚蠢。
它的作用:它在实际执行 doStuff() 之前执行 2000 毫秒的刷新动画。
我(显然!!)想做的事:在执行 doStuff() 时刷新动画然后停止。无需计时器!难道我做错了什么 ?网上告诉我不...
view.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeEmptyView.setRefreshing(true);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doStuff();
swipeEmptyView.setRefreshing(false);
}
}, 2000);
}
});
您的评论的回复应该是一个答案。
http 请求的重点是 运行 后台的一项艰苦工作,这就是 AsyncTask 的设计目的。否则,您将在 Mainthread 上遇到 运行ning 网络请求异常,请 Google 了解更多。
关于 SwipeRefreshLayout,我认为它会自动显示加载动画,直到您调用 mSwipeLayout.setRefreshing(false)。所以这里有2种实现:
2.1 - 使用 AsyncTask 进行 http 请求,使用您自己的加载动画(有或没有 SwipeRefreshLayout):
public class MyAsyncTask<DummyStuff> extends AsyncTask<Void, Void, Void> {
public void onPreExecute() {
// start your animation here
// NOTE: if you use SwipeRefreshLayout, it will automatically show animation when you swipe your layout down, so please consider your UX to do what you want.
}
public void onDoinBackground(Void... input) {
// do something
// http request or something
return null; // return what ever you get
}
public void onPostExecute(Void... result) {
// stop your animation here
// in case you use SwipeRefreshLayout, call mSRL.setRefreshing(false) here too.
}
}
2.2 使用您的 SwipeRefreshLayout 在任务上方的用户:
我只展示重要的部分:
mSRL.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
(new MyAsyncTask()).execute();
}
});
以上只是关于应该在哪里做什么的想法,请自行尝试。
我稍后会用真实样本更新这个答案。但我希望你能明白这里的意思。