【发布时间】:2014-10-26 13:54:30
【问题描述】:
我有一个带有 AsyncTask 的 Android 应用程序,它负责从 Internet 下载文件。单击 Listview 中的项目时会执行此 AsyncTask。所以我有一个自定义适配器,在 Listview 的 OnItemClickListener 中,我开始下载并执行 AsyncTask。
现在,我的适配器包含以下代码来启动名为 FileDownloader 的 AsyncTask:
@Override
public void onClick(View view) {
try {
FileDownloader fd = new FileDownloader(activity);
// some irrelevant code here
String filepath = fd.execute("http://myurl.com/img.png", PDFFileName, GameHistoryAdapter.this.gameInfo.toString()).get();
}
catch(Exception e) { e.printStackTrace(); }
}
Activity是一个私有字段,在适配器的构造函数中传递给适配器:
public GameHistoryAdapter(Activity a, int selectedIndex) {
this.activity = a;
}
FileDownloader 类包含一个 OnPreExecute 方法,我想在其中显示活动的进度对话框:
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(activity);
dialog.setMessage("Downloading...");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
}
但无论我尝试什么,对话框都不会出现。当我在 AsyncTask 的 OnPostExecute 方法中创建警报对话框时,将显示该对话框。
@Override
protected void onPostExecute(String res)
{
super.onPostExecute(res);
dialog.hide();
new AlertDialog.Builder(activity)
.setTitle(activity.getString(R.string.save_pdf_title_text))
.setMessage(activity.getString(R.string.save_pdf_text) + PDFFileName)
.setPositiveButton(activity.getString(R.string.close_text), null)
.setIcon(android.R.drawable.ic_dialog_info)
.show();
}
有人知道为什么我的活动中没有出现对话框吗?
【问题讨论】:
-
在 AsyncTask 的构造函数中初始化对话框。在 onPreExecute 中只写 dialog.show();
标签: java android listview android-asynctask dialog