2

Activity「A1」とListActivity「A2」があります

「A1」でユーザーから入力を受け取り、ユーザーからActivityの入力に応じて、処理して結果リストを生成します。生成されたリストは、私のListActivity「A2」に表示されます。

現在、入力の処理と結果リストの生成には少し時間がかかりすぎます。そのため、今回は読み込みダイアログ、画像の読み込み、メッセージの読み込みを表示して、アプリが何もしないで立ち往生しているとユーザーが思わないようにします。

今までに試したこと:はい、試しましたAsyncTask!(私は多くの人がそれを提案しようとしていることを知っています)それで今私はすべての処理をで行っていますAsyncTask。を表示し、ProgressDialogonPreExecute処理を実行doInBackgroundし、ダイアログを閉じていonPostExecuteます。

ListActivityただし、ダイアログは「A2」が始まる直前に表示されます。それまではActivity「A1」が立ち往生しているようです!

「A1」の「送信」ボタンをクリックしたときにダイアログが表示され、「A2」が表示されるActivityまで表示され続けるようにします。ListActivity

詳細が必要な場合はお知らせください。ありがとう。

-編集-

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;
        }
}
4

2 に答える 2

1

私はこれを解決しました!

Intent作成するコードをに移動しましたonPostExecute

この背後にある理由:UIスレッド( 「A1」)は、 「A2」を表示できるように、とにかく結果が返されるActivityのを待っていました。AsyncTaskListActivity

これで、インテントの作成とListActivity「A2」onPostExecuteの開始がUIスレッドで行われるようになり、フリーズすることなく機能できるようになりました。

@Aswin Kumarを助けてくれてありがとう!

この質問と回答が他の人に役立つことを願っています。:)

于 2012-09-13T19:03:41.980 に答える
0

問題を正しく理解している場合は、[送信]をクリックしてダイアログを表示し、それを閉じてから、データが入力されたアクティビティA2を表示します。

だからあなたはまさにそれをすることができます:

  1. 送信AsyncTaskの開始onClick

  2. 表示するProgressDialog

  3. 処理を行う

  4. onPostExecuteを介してA2に渡されるオブジェクトとしてデータを保存しIntent、ダイアログを閉じて、保存されたデータを使用してリストアクティビティA2を開始します。Intent

  5. アクティビティA2では、渡されたデータを解析してリストを表示するだけです。

于 2012-09-11T15:55:37.647 に答える