取消搜索时的imageLoader任务

时间:2017-07-04 12:13:14

标签: android listview android-asynctask android-adapter android-search

我的项目有一个带自定义适配器的搜索视图, 适配器ViewHolder包含ImageView

我使用2个任务:1-搜索任务2-图像加载任务

所以当我开始搜索任务时,在Post Execute上设置数据适配器并通知它 那么图像加载器的执行次数与结果的数量一样多!

当我重新运行搜索任务时,我应该等到图像加载器的任务完成

最后,如何在重新运行SearchTask之前取消ImageLoader任务?

适配器:

@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;
}

1 个答案:

答案 0 :(得分:1)

为了能够一举取消所有ImageLoader,您必须在适配器中继续引用它们,并在适配器中声明一个公共方法,它将取消所有:

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;
    }
}

现在,您可以在搜索之前通过调用cancelImageLoaders()

取消所有图片加载器