描述:我有一个网格视图,横向模式有 4 个项目,纵向模式有 3 个项目。网格元素是杂志缩略图。单击该杂志的缩略图开始下载,并出现一个水平进度条,显示下载进度。但是当我一个接一个地点击两个缩略图时,后来点击的缩略图的进度条只会更新,最后损坏的杂志被下载了。我使用异步任务进行杂志下载。
代码:
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
progress = (ProgressBar) arg1.findViewById(R.id.progress);
thumbnail = (ImageView) arg1.findViewById(R.id.thumbnail);
thumbnail.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Download Magazine
downloadMagazine.execute(bank.get(index).getPdfLink());
}
});
}
class DownloadMagazineTask extends AsyncTask<String, Integer, Long> {
File sdDir = Environment.getExternalStorageDirectory();
@Override
protected void onPreExecute() {
progress.setVisibility(View.VISIBLE);
}
@Override
protected Long doInBackground(String... arg0) {
String[] urls = arg0;
try {
URL url = new URL(urls[0]);
URLConnection con = url.openConnection();
int fileLength = con.getContentLength();
InputStream input = new BufferedInputStream(url.openStream());
File file = null;
File dir = new File(sdDir + "/BeSpoken/pdfs");
boolean flag = dir.mkdirs();
if (flag)
System.out.println("Directory created");
else {
System.out.println("Directory not created");
file = new File(dir+ "/"+ bank.get(index).getPdfLink().substring(bank.get(index).getPdfLink().lastIndexOf("/")));
}
OutputStream output = new FileOutputStream(file);
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
publishProgress((int) (total * 100 / fileLength));
output.write(data, 0, count);
}
String m = bank.get(index).getTitle();
manager.updateDownloadedMagazines(
Integer.parseInt(m.substring(m.lastIndexOf(" ") + 1)),
file.toString());
output.flush();
output.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
startActivity(getIntent());
finish();
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
progress.setProgress(values[0]);
}
@Override
protected void onPostExecute(Long result) {
super.onPostExecute(result);
progress.setVisibility(View.INVISIBLE);
}
}
问题:如何实现多个下载功能,以便进度条单独显示每个下载的进度?