【发布时间】:2012-09-11 13:54:37
【问题描述】:
我有一个Activity“A1”和一个ListActivity“A2”
我从Activity“A1”中的用户那里获取输入,并根据用户给出的输入来处理并生成一个结果列表。然后生成的列表将显示在我的ListActivity“A2”中。
现在,处理输入和生成结果列表需要一点时间。所以我想在这个时候显示一个加载对话框或加载图像或加载消息,这样用户就不会认为应用程序卡住了。
现在我到目前为止尝试过的事情:
是的,我试过AsyncTask! (我知道很多人会建议它)所以现在我在AsyncTask 中进行所有处理。我在onPreExecute 中显示ProgressDialog,在doInBackground 中进行处理并关闭对话框onPostExecute。
但是,对话框出现在ListActivity“A2”开始之前。在那之前,Activity“A1”似乎被卡住了!
我希望当我点击Activity“A1”上的“提交”按钮时,该对话框会立即显示并继续显示,直到出现ListActivity“A2”。
如果您需要更多详细信息,请告诉我。谢谢。
-编辑-
onClick方法中的代码:
ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Processing... Please Wait...");
progressDialog.show();
// Execute task
MyTask myTask = new MyTask(progressDialog);
AsyncTask<String, Void, ArrayList<HashMap<String, String>>> result =
myTask.execute(userChoice);
Intent intent = new Intent(this, ListActivityA2.class);
// Put results in intent
intent.putExtra("results", resultsList);
// Start result activity
startActivity(intent);
异步任务
public class MyTask extends
AsyncTask<String, Void, ArrayList<HashMap<String, String>>> {
ArrayList<HashMap<String, String>> resultsList =
new ArrayList<HashMap<String, String>>();
ProgressDialog progressDialog;
public MyTask(ProgressDialog progressDialog) {
this.progressDialog = progressDialog;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(
String... params) {
return doProcess(params[0]);
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
progressDialog.dismiss();
super.onPostExecute(result);
}
private ArrayList<HashMap<String, String>> doProcess(String choice) {
// do processing here
return arrayList;
}
}
【问题讨论】:
-
我实际上建议你在点击时开始一个进度条;在里面做你的计算;关闭时启动 Activity2 :)
标签: android listview android-activity android-asynctask