我有Activity
“A1”和ListActivity
“A2”
我从用户Activity
“A1”中获取输入,并根据用户给出的输入我处理并生成结果列表。生成的列表将显示在我的ListActivity
“A2”中。
现在,处理输入并生成结果列表需要花费太长时间。因此,我希望在此时显示加载对话框或加载图像或加载消息,以便用户不会认为该应用程序无效。
现在我尝试的东西到目前为止:
是的,我试过了AsyncTask
! (我知道很多人都会建议)所以现在我正在AsyncTask
进行所有处理。我在ProgressDialog
中显示onPreExecute
,在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);
的AsyncTask
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;
}
}
答案 0 :(得分:1)
我已经解决了这个问题!
我移动了代码以创建Intent
到onPostExecute
背后的原因:UI线程(Activity
“A1”)无论如何都在等待AsyncTask
返回结果,以便它可以显示ListActivity
“A2”< / p>
现在创建意图并在ListActivity
中发生onPostExecute
“A2”,UI线程可以在不冻结的情况下工作。
感谢所有人的帮助@Aswin Kumar!
希望这个问题和答案能帮助他人。 :)
答案 1 :(得分:0)
如果我正确理解您的问题,您希望在单击提交时显示对话框,将其关闭,然后显示活动A2并填入数据。
所以你可以做到这一点:
启动提交
AsyncTask
中的onClick
显示ProgressDialog
进行处理
onPostExecute
,将数据保存为要通过Intent
传递给A2的对象,关闭对话框,并使用已保存的列表活动A2启动Intent
在活动A2中,只需解析传入的数据并显示列表。