IllegalArgumentException: представление не привязано к оконному менеджеру.Dialog.dismiss - PullRequest
0 голосов
/ 11 мая 2011

У меня есть маленькая ошибка, от которой я хочу избавиться. Я понятия не имею, почему эта ошибка происходит. Симулятор и тестовый телефон работает отлично! Единственная информация, которую я имею, - это Stacktraces, которые я получил от пользователей приложения в Android Market.

java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
at android.view.Window$LocalWindowManager.removeView(Window.java:432)
at android.app.Dialog.dismissDialog(Dialog.java:278)
at android.app.Dialog.access$000(Dialog.java:71)
at android.app.Dialog$1.run(Dialog.java:111)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method

Сначала я подумал, что приведенный ниже код вызовет сбой приложения, если пользователь изменит ориентацию телефона, пока диалоговое окно прогресса еще не закрыто. Я сделал так, чтобы ориентация не изменилась, добавив: android: screenOrientation = "Portrait". Но ошибка все еще жива.

Кто-нибудь может мне помочь? Это пример кода, который я использую:

final ProgressDialog pd = ProgressDialog.show(this, "Title", "Message",  true, false);

new Thread(new Runnable(){
public void run(){
    makeHttpRequest();
    pd.dimiss();
}
}).start();

Ответы [ 3 ]

0 голосов
/ 11 мая 2011

Вы положили android:screenOrientation="portrait" в активность или в приложение? также это исключение возникает, когда диалог не закрывается должным образом, когда активность прекращается, это означает, что вы должны обрабатывать отклонение диалога в onPause / onStop. Я однажды сталкивался с этой проблемой.

0 голосов
/ 27 ноября 2013

Даже если вы ограничите ориентацию портретной ориентацией, экран блокировки, например, может перейти в альбомную ориентацию, и ваша деятельность будет воссоздана.Чтобы убедиться, что диалоговое окно закрыто, я сделал бы следующее:

if (dialog != null && dialog.isShowing()) {
    dialog.cancel();
}

Кроме того, вы должны закрыть диалоговое окно, когда действие уничтожено:

@Override
protected void onDestroy() {    
    if (dialog != null && dialog.isShowing()) {
        dialog.cancel();
    }

    super.onDestroy();
}

Это решилопроблема для меня - надеюсь, это поможет:)

0 голосов
/ 11 мая 2011

Попробуйте этот код:

 update.setTitle(getResources().getString(R.string.app_name));
                update.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                update.setCancelable(true);
                update.setMax(100);
                update.show();


                Thread background = new Thread (new Runnable() {
                       public void run() {
                           try {
                               // enter the code to be run while displaying the progressbar.
                               //
                               // This example is just going to increment the progress bar:
                               // So keep running until the progress value reaches maximum value
                               while (update.getProgress()<= update.getMax()) {
                                   // wait 500ms between each update
                                   Thread.sleep(500);

                                   // active the update handler
                                   progressHandler.sendMessage(progressHandler.obtainMessage());
                               }

                           } catch (java.lang.InterruptedException e) {
                               // if something fails do something smart
                           }
                       }
                    });// start the background thread
                    background.start();
                    if(update.getProgress()== 100)
                       {
                           update.dismiss();
                       }
                }




        })
        .setNegativeButton("No", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub

            }
        })
        .show();
...