40

Android-App 用の ProgressDialog を作成しようとしています (何かが起こっていることをユーザーに示す単純なもので、ボタンなどはありません) が、正しく取得できません。フォーラムやチュートリアル、SDK に付属のサンプル コードを調べましたが、役に立ちませんでした。

これは私が得たものです:

    btnSubmit.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        (...)
          ProgressDialog pd = new ProgressDialog(MyApp.this);
          pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
          pd.setMessage("Working...");
          pd.setIndeterminate(true);
          pd.setCancelable(false);

          // now fetch the results
          (...long time calculations here...)

          // remove progress dialog
          pd.dismiss();

pd.show();また、パラメーターを追加していじってみましたが、new ProgressDialog結果として何も発生しませんでした (選択したパラメーターが機能しないというエラーを除く)。つまり、ProgressDialog は表示されません。ダイアログを追加しなかったかのように、アプリは実行され続けます。

ダイアログを適切な場所に作成しているかどうかはわかりません。少し移動しましたが、それも役に立ちませんでした。多分私は間違った文脈にいますか?上記のコードは の中private ViewGroup _createInputForm()にありMyAppます。

どんなヒントでも大歓迎です、

4

4 に答える 4

42

長い計算が開​​始される前に pd.show を呼び出す必要があり、その後、計算を別のスレッドで実行する必要があります。このスレッドが終了したらすぐに、pd.dismiss() を呼び出して進行状況ダイアログを閉じる必要があります。

ここで例を見ることができます:

プログレス ダイアログが作成および表示され、負荷の高い計算を実行するためにスレッドが呼び出されます。

@Override
    public void onClick(View v) {
       pd = ProgressDialog.show(lexs, "Search", "Searching...", true, false);
       Search search = new Search(   ...   );
       SearchThread searchThread = new SearchThread(search);
       searchThread.start();
    }

そしてここにスレッド:

private class SearchThread extends Thread {

        private Search search;

        public SearchThread(Search search) {
            this.search = search;
        }

        @Override
        public void run() {         
            search.search();
            handler.sendEmptyMessage(0);
        }

        private Handler handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                displaySearchResults(search);
                pd.dismiss();
            }
        };
    }
于 2010-05-09T17:09:02.190 に答える
25

私はあなたにそれに対する解決策を提供しています、これを試してください...最初にActivity beforeonCreate()メソッドでProgress Dialogを定義します

private ProgressDialog progressDialog;

メソッドではonCreate、任意のアクションでアクティビティを変更する Any ボタンをクリックすることがあります。そこに進行状況バーを設定するだけです。

progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading...");

スレッドを使用して進行状況バーを処理し、表示および非表示にします

new Thread() 
{
    public void run() 
   {
       try
       {
           sleep(1500); 
           // do the background process or any work that takes time to see progress dialog
       }
       catch (Exception e)
       {
           Log.e("tag",e.getMessage());
       }
       // dismiss the progress dialog   
       progressDialog.dismiss();
    }
}.start();

それだけです!

于 2011-04-12T06:24:14.270 に答える