2

我有一个Activity“A1”和一个ListActivity“A2”

我从Activity“A1”中的用户那里获取输入,并根据用户给出的输入进行处理并生成结果列表。然后生成的列表将显示在我的ListActivity“A2”中。

现在,处理输入和生成结果列表需要一点时间。所以我想在这个时候显示一个加载对话框或加载图像或加载消息,这样用户就不会认为应用程序无所事事。

现在我到目前为止尝试过的事情:是的,我试过了AsyncTask!(我知道很多人都会建议它)所以现在我正在一个AsyncTask. 我正在显示ProgressDialogonPreExecute正在处理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;
        }
}
4

2 回答 2

1

我已经解决了这个问题!

我将要创建的代码Intent移至onPostExecute

这背后的原因:UI线程(Activity“A1”)无论如何都在等待AsyncTask返回结果,以便它可以显示ListActivity“A2”

现在,UI 线程中的创建意图和启动ListActivity“A2”可以在不冻结的情况下工作。onPostExecute

感谢您的所有帮助@Aswin Kumar!

希望这个问题和答案对其他人有所帮助。:)

于 2012-09-13T19:03:41.980 回答
0

如果我正确理解您的问题,您希望在单击提交时显示对话框,将其关闭,然后显示填充数据的活动 A2。

所以你可以做到这一点:

  1. 开始提交AsyncTask_onClick

  2. 显示ProgressDialog

  3. 做加工

  4. onPostExecute将数据保存为要传递给 A2 的对象Intent,关闭对话框,然后使用保存的数据启动列表活动 A2Intent

  5. 在活动A2中,只需解析传入的数据并显示列表。

于 2012-09-11T15:55:37.647 回答