2011-07-13 5 views
0

ProgressDialogを表示するアクティビティがあります。私は自分のアクティビティでonCreateDialogをオーバーライドします。ProgressDialogを表示中にAndroidがエラーを取得しています

protected Dialog onCreateDialog(int id){ 
    switch (id) { 
    case DOWNLOAD_DIALOG: 
     ProgressDialog dialog = new ProgressDialog(ListMapActivity.this); 
     dialog.setTitle(getResources().getString(R.string.dialog_download_title)); 
     dialog.setCancelable(true); 
     dialog.setOnCancelListener(new OnCancelListener() { 

      @Override 
      public void onCancel(DialogInterface dialog) { 
       if ((mTask.getStatus().equals(AsyncTask.Status.RUNNING) 
        || mTask.getStatus().equals(AsyncTask.Status.PENDING)) 
        && !mTask.isCancelled()){ 
        mTask.cancel(true); 
       } 
       Toast.makeText(getApplicationContext(), R.string.dialog_download_cancel, Toast.LENGTH_LONG).show(); 
      } 
     });   
     TextView tw = new TextView(ListMapActivity.this); 
     dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
     tw.setLayoutParams(params); 
     tw.setText(getResources().getString(R.string.dialog_download_text)); 
     dialog.setContentView(tw); 


     return dialog; 

    default: 
     return null; 
    } 
} 

注:

07-13 13:10:11.449: ERROR/AndroidRuntime(8720): android.util.AndroidRuntimeException:  requestFeature() must be called before adding content 
07-13 13:10:11.449: ERROR/AndroidRuntime(8720):  at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:181) 
07-13 13:10:11.449: ERROR/AndroidRuntime(8720):  at com.android.internal.app.AlertController.installContent(AlertController.java:199) 
07-13 13:10:11.449: ERROR/AndroidRuntime(8720):  at android.app.AlertDialog.onCreate(AlertDialog.java:251) 
07-13 13:10:11.449: ERROR/AndroidRuntime(8720):  at android.app.ProgressDialog.onCreate(ProgressDialog.java:176) 
07-13 13:10:11.449: ERROR/AndroidRuntime(8720):  at android.app.Dialog.dispatchOnCreate(Dialog.java:307) 
07-13 13:10:11.449: ERROR/AndroidRuntime(8720):  at android.app.Activity.createDialog(Activity.java:886) 
07-13 13:10:11.449: ERROR/AndroidRuntime(8720):  at android.app.Activity.showDialog(Activity.java:2557) 
07-13 13:10:11.449: ERROR/AndroidRuntime(8720):  at  android.app.Activity.showDialog(Activity.java:2524) 

onCreateDialog(int型のID)は次のようになります。毎回onCreateDialog中のダイアログに戻り、私は言って、力クローズを取得し、私はProgressDialog.Show(コンテキスト、タイトルを試してみました、メッセージ)を直接実行して、結果を表示します。

07-13 13:03:42.910: ERROR/AndroidRuntime(8444): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
07-13 13:03:42.910: ERROR/AndroidRuntime(8444):  at android.view.ViewRoot.setView(ViewRoot.java:531) 
07-13 13:03:42.910: ERROR/AndroidRuntime(8444):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
07-13 13:03:42.910: ERROR/AndroidRuntime(8444):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
07-13 13:03:42.910: ERROR/AndroidRuntime(8444):  at android.app.Dialog.show(Dialog.java:241) 
07-13 13:03:42.910: ERROR/AndroidRuntime(8444):  at android.app.ProgressDialog.show(ProgressDialog.java:107) 
07-13 13:03:42.910: ERROR/AndroidRuntime(8444):  at android.app.ProgressDialog.show(ProgressDialog.java:90) 
07-13 13:03:42.910: ERROR/AndroidRuntime(8444):  at android.app.ProgressDialog.show(ProgressDialog.java:85) 

私は何かを忘れてしまいます。私はこのrequestFeature()が呼び出された場所がわからない。すべてのアイデアは大歓迎です

UPDATE:

 LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
     tw.setLayoutParams(params); 
     tw.setText(getResources().getString(R.string.dialog_download_text)); 
     dialog.setContentView(tw); 

だから私はコンテンツの設定方法に迷ってしまいました:私は少し周りを演奏し、私はこれらの行を削除した場合、すべてが、再び動作すること、が分かった このビューのメンバーとしての自分のアクティビティのonCreateでメインデザインを作成し、これをProgressDialogに配置すると、助けになりません。私は単に問題を起こさない。私のダイアログのコンテンツとしてTextViewをオンザフライで配置するのは間違っていますか?

+0

どこでshowDialog()を呼び出しますか?コードには表示されていません。 – Fortega

+0

実際に私はアクティビティのネストされたクラスとして定義されたAsyncTaskからonPreExecute()でそれを開始しようとしています。しかし、私はあなたのアクティビティのonCreate()またはListViewのonItemClick()で呼び出すと同じエラーが発生します –

+0

アクティブまたはアクティブ(アクティブ)アクティビティのユーザコンテキストでダイアログを作成する必要があります。 – Arslan

答えて

2

これを試してみてください。

ProgressDialog dialog = ProgressDialog.show(yourActivity.this, "", 
         "Loading. Please wait...", true); 

ありがとうございます。

+0

を作るのsetContent()が、私です機能を取得しないでください。たとえば、onPostExecute()でダイアログを取り消したいとします。 –

+0

も掲示別のエラーを取得しようとしていることがわかり、あなたが私の質問を読んでいる場合、トラブル –

+0

私の応答を正しく読めば、文脈の代わりに "yourActivity.this"と言いました。あなたの例外は文脈がヌルだと言っています... "トークンヌルはアプリケーションのためではありません" –

0

このエラーメッセージrequestFeature() must be called before adding contentはあなたがコンテンツを追加した後に呼び出すことが許可されていないことをあなたは、ダイアログ上のメソッドを呼び出していることを意味します。

私はこれらの行に移動します:彼らは、この行の前になるように

dialog.setCancelable(true); 
dialog.setTitle(getResources().getString(R.string.dialog_download_title)); 

を:

dialog.setContentView(tw); 

のsetTitleは、エラーのためにあなたの最も可能性の高い候補です。

+0

あなたのソリューションに合わせて私の投稿を更新しましたが、まだ運がありません –

+0

setTitleが働いています。それは完全にあなたが私はすでに、これは私がonPreExecuteでProgressDialog.showを()()を呼び出した場合うーん、それが動作 –

関連する問題