My project has a search view with custom adapter, adapter ViewHolder contain ImageView
I use 2 tasks: 1- search task 2- image load task
so when I start search task, on Post Execute I set data adapter and notif it then image loader is execute as much as the number of results!
When I rerun the search task,I Should wait until the tasks of the image loader are finished
Finally how can I cancel ImageLoader tasks before rerun SearchTask??
adapter:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) activityReference.get().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_row1, parent, false);
viewHolder.title = (TextView) convertView.findViewById(R.id.row_title);
viewHolder.artist = (TextView) convertView.findViewById(R.id.row_artist);
viewHolder.cover = (FadeInNetworkImageView) convertView.findViewById(R.id.cover);
convertView.setTag(viewHolder);
} else
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.title.setText(songs[position].getArtist());
viewHolder.artist.setText(songs[position].getTitle());
new ImageLoader().execute(songs[position], this, this, viewHolder, Online.isConnectedWifi(context));
return convertView;
}
In order to be able to cancel all the ImageLoader
s in one swoop, you are going to have to keep reference to them in your adapter and, in your adapter, declare a public method that shall cancel them all:
public class MhadisAdapter extends SomeKindOfAdapter {
private List<ImageLoader> imageLoaderTasks = new ArrayList<>();
public void cancelImageLoaders() {
for(ImageLoader task: imageLoaderTasks) {
task.cancel(true);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
...
ImageLoader imageLoader = new ImageLoader();
imageLoaderTasks.add(imageLoader);
imageLoader.execute(songs[position], this, this, viewHolder, Online.isConnectedWifi(context));
return convertView;
}
}
Now you can cancel all the image loaders before searching by calling cancelImageLoaders()