3

実行に約 3 ~ 5 秒かかるメソッドのセットアップがあり (オンラインで何かを行うため)、読み込みダイアログを表示したいのですが、その方法がわかりません。呼び出す前に読み込みダイアログを開始しようとしましたメソッドは、次のようにすぐにそれを却下しようとしました。

dialog.show();
myMethod();
dialog.cancel();

しかし、それはうまくいきませんでした。誰か提案はありますか?

4

2 に答える 2

8

AsyncTask は私のお気に入りですが、Handlers も使用できます :)

この素敵なブログを読むために時間を投資してください。

以下のスニペットが役立ちます。

    package org.sample;

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.os.Handler;

    public class Hello extends Activity {

        private Handler handler;
        private ProgressDialog dialog;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            dialog = new ProgressDialog(this);
            dialog.setMessage("Please Wait!!");
            dialog.setCancelable(false);
            dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            dialog.show();

            new Thread() {
                public void run() {
                    // Do operation here.
                    // ...
                    // ...
                    // and then mark handler to notify to main thread 
                    // to  remove  progressbar
                    //
                    // handler.sendEmptyMessage(0);
                    //
                    // Or if you want to access UI elements here then
                    //
                    // runOnUiThread(new Runnable() {
                    //
                    //     public void run() {
                    //         Now here you can interact 
                    //         with ui elemements.
                    //
                    //     }
                    // });
                }
            }.start();

            handler = new Handler() {
                public void handleMessage(android.os.Message msg) {
                    dialog.dismiss();
                };
            };
        }
    }
于 2012-06-14T05:39:40.863 に答える
1

UI スレッドで長時間のタスクを実行することは、「いいえ」です。AsyncTask長期間のタスクをバックグラウンドで実行し、完了時に UI を更新するために使用します。

于 2012-06-14T05:32:44.423 に答える