我有一个OnScrollChangedListener来控制视图是否对屏幕可见,然后在从ScrollView中删除侦听器后调用asynctask:
scrollView = (ScrollView) findViewById(R.id.scrollView);
scrollListener = new OnScrollChangedListener() {
@Override
public void onScrollChanged() {
Rect scrollBounds = new Rect();
scrollView.getHitRect(scrollBounds);
if (spinner.getLocalVisibleRect(scrollBounds)) {
observer = scrollView.getViewTreeObserver();
observer.removeOnScrollChangedListener(this);
new MyTask().execute(null,
null, null);
}
}
};
observer = scrollView.getViewTreeObserver();
observer.addOnScrollChangedListener(scrollListener);
但我注意到出了问题。事实上,当我滚动和视图变得可见时,如果分支执行两次,那么我的代码调用两次asynctask。现在任务从互联网恢复一些数据,这样,我获得了重复的信息(浪费了3g数据)。 我怎么能只为呼叫任务做一次,所以避免这种行为?
答案 0 :(得分:1)
Boolean isloading = false; //Instance Variable
在async任务的onPreExecute()中使此标志为true,在onPostExecute()中为false。然后在发出新的执行请求之前检查此标志是否为false;
if(!isLoading){
new MyTask().execute(null,null, null);
答案 1 :(得分:0)
scrollListener = new OnScrollChangedListener() {
AsyncTask<?, ?, ?> myTask;
@Override
public void onScrollChanged() {
Rect scrollBounds = new Rect();
if (spinner.getLocalVisibleRect(scrollBounds)) {
synchronized (this) {
if (myTask == null) {
observer = scrollView.getViewTreeObserver();
observer.removeOnScrollChangedListener(this);
myTask = new MyTask().execute(null, null, null);
}
}
}
}
};