如何在活动结束前处理时在Android活动中显示加载消息或对话框或图像?

时间:2012-09-11 13:54:37

标签: android listview android-activity android-asynctask

我有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;
        }
}

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题!

我移动了代码以创建IntentonPostExecute

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

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

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

希望这个问题和答案能帮助他人。 :)

答案 1 :(得分:0)

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

所以你可以做到这一点:

  1. 启动提交

  2. AsyncTask中的onClick
  3. 显示ProgressDialog

  4. 进行处理

  5. onPostExecute将数据保存为要通过Intent 传递给A2的对象,关闭对话框,并使用已保存的列表活动A2启动Intent

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