Android получает ошибку во время шоу ProgressDialog - PullRequest
0 голосов
/ 13 июля 2011

У меня есть активность, где я хочу показать ProgressDialog.Я переопределить onCreateDialog в моей деятельности.Каждый раз, когда диалог возвращается в onCreateDialog, я получаю принудительное закрытие, говоря:

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) выглядит так:

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

Примечание: я пробовал ProgressDialog.Show(context, title, message) для непосредственного выполнения вместо showDialog (), с таким результатом:

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 ().Приветствуется любая идеяустановить содержание этого представления.Это не помогает, когда я создаю Main-дизайн в onCreate моей Деятельности как участник и помещаю это в ProgressDialog.Я просто не понимаю проблемы.Что плохого в том, чтобы выложить TextView на лету, чтобы он отображался как Контент из моего Диалога?

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

просто попробуйте это.

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

Спасибо.

0 голосов
/ 13 июля 2011

Это сообщение об ошибке requestFeature() must be called before adding content означает, что вы вызываете метод в диалоговом окне, который вы не можете вызвать после добавления содержимого.

Я бы переместил эти строки:

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

Чтобы они были до этой строки:

dialog.setContentView(tw);

setTitle - ваш наиболее вероятный кандидат на ошибку.

...