【发布时间】:2014-10-16 02:45:02
【问题描述】:
我有一个 ListView,其中包含作为项目的文件。当我单击一个项目时,会启动一个 AsyncTask,下载文件。 现在,在下载文件时,我在 ListView 中的名称旁边有一个 ProgressBar。
我的问题是:当我点击某些项目时,即使我没有点击它们,在列表视图中的其他项目上也可以看到旋转轮。
CategoryActivity.java(ListView的Activity,只有有用的部分):
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// Récupère les valeurs depuis ListItem
udl = ((TextView) view.findViewById(R.id.udl)).getText().toString();
loader = ((ProgressBar) view.findViewById(R.id.spinWheel2));
filepath = dirpath + udl + ".pdf";
File file = new File(filepath);
if (file.exists()) {
// If files exists I open it
}else{ // I download it
// There I set the ProgressBar to VISIBLE
loader.setVisibility(View.VISIBLE);
// Call the AsyncTask
final DownloadTask downloadTask = new DownloadTask(CategoryActivity.this);
downloadTask.execute();
}
}
});
}
public static String getUdl(){
return udl;
}
public static ProgressBar getLoader(){
return loader;
}
DownloadTask.java(仅有用的部分):
public class DownloadTask extends AsyncTask<Void, Integer, String> {
public static String url1 = some url;
private static String url2 = "";
private static String url3 = CategoryActivity.getUdl();
public static ProgressBar loader = CategoryActivity.getLoader();
private static String url = "";
final static String dirpath = Environment.getExternalStorageDirectory().toString()+ "/SomeDirectory/";
public static String filepath = "";
public static final String PREFS_TEXT = "PrefsTextView";
private Context context;
public DownloadTask(Context context) {
this.context = context;
url3 = CategoryActivity.getUdl();
loader = CategoryActivity.getLoader();
}
@Override
protected String doInBackground(Void... params) {
SharedPreferences codeSaveUrl = context.getSharedPreferences(PREFS_TEXT,Context.MODE_PRIVATE);
url2 = codeSaveUrl.getString("defaut", ""); // Code Organisation
url = url1 + url2 + "&file=" + url3 ;
filepath = dirpath + url3 + ".pdf";
//Download of the file
HttpHandler hh = new HttpHandler();
try {
hh.download(url, filepath, this);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
return null;
}
public void doProgress(int value){ // Méthode appelée dans HttpHandler
publishProgress(value);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
StorageDirectory sd = new StorageDirectory(); // Appel à la classe StorageDirectory
sd.callStorageDirectory(); // Création du répertoire de stockage sur mémoire externe
}
@Override
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
}
@Override // Evènement de post-execution
protected void onPostExecute(String result) {
// There I set the ProgressBar to GONE
loader.setVisibility(View.GONE);
if (result != null){
Toast.makeText(context,"Erreur lors du téléchargement : "+result, Toast.LENGTH_LONG).show();
}else{
// Note that this message is correctly shown on screen when the download finishes
Toast.makeText(context,"Le fichier a bien été téléchargé", Toast.LENGTH_SHORT).show();
}
}
}
当我点击它们时,每个文件都会被下载,唯一的问题是旋转轮被克隆到其他项目上。
编辑:这是图片:
当我点击这个项目时:
这个项目的旋转轮(它没有和第一个同时出现在屏幕上)也显示(它的文件没有下载):
感谢您的帮助。
【问题讨论】:
标签: android listview android-listview android-asynctask android-progressbar