2010-07-31 16 views
15

Obtengo lo siguiente de forma remota de los clientes, por lo que no sé qué hardware están utilizando.Error: Vista no conectada al administrador de ventanas

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:417) 
     at android.app.Dialog.dismissDialog(Dialog.java:279) 
     at android.app.Dialog.access$000(Dialog.java:72) 
     at android.app.Dialog$1.run(Dialog.java:108) 
     at android.app.Dialog.dismiss(Dialog.java:263) 
     at com..mysite.android.ActivityGame$1.onFinish(ActivityGame.java:154) 
     at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:123) 
     at android.app.ActivityThread.main(ActivityThread.java:4203) 
     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:799) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 

Esto está sucediendo debido a una ProgressDialog

progressDialog = new ProgressDialog(this); 
    progressDialog.setMessage(getString(R.string.get_ready)); 
    progressDialog.setCancelable(false); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    progressDialog.setMax(12); 
    progressDialog.show(); 

    new CountDownTimer(3000, 250) { 

     @Override 
     public void onTick(long millisUntilFinished) { 
      //progressDialog.incrementProgressBy(1); 
     } 

     @Override 
     public void onFinish() { 
      progressDialog.dismiss(); //********* ERROR HAPPENS HERE ********* 
      nextQuestion(); 
     } 
    }.start(); 

La actividad se ve así en el manifiesto.

<activity android:theme="@style/GameTheme" android:name=".ActivityGame" android:screenOrientation="portrait" android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation"></activity> 

¿Qué podría significar esto? Creo que tiene algo que ver con la Actividad que se está destruyendo y luego se creó, pero como se puede ver, configChanges se configuró correctamente.

+0

He visto algo similar. Si presiona Inicio o Atrás mientras se muestra el cuadro de diálogo de progreso, probablemente obtenga este error. –

+0

Consulte esta respuesta si desea usar la llamada de configuración de cambio en lugar de volver a crear actividad http://stackoverflow.com/a/2418763/117220 –

+0

Aceptar una respuesta si algo ayudó – Br0thazS0ul

Respuesta

3

Suele suceder cuando se cierra la llamada después de cerrar la actividad.

21

Probar:

if (pDialog.isShowing()) { 
    pDialog.cancel(); 
} 

en sus anulado onDestroy() o onStop() métodos.

+0

Gracias funciona como magia ... – Richa

+2

Sorprendentemente en algunos la excepción todavía puede aparecer. Tengo un cheque nulo y estoy mostrando un cheque y todavía obtengo la excepción cuando cambio la orientación. –

+0

cambiando la orientación, reconstruyó la actividad actual. – Ajay

1

También me enfrenté al mismo problema cuando traté de cerrar el diálogo en el método onPageFinished de la vista web. a veces en Llamada finalizada llamada después de que se cerró la actividad.

Aquí está la solución para ello:

if(pDialog.isShowing()) 
    { 
     try 
     { 
     pDialog.dismiss(); 
     } 
     catch(Exception e) {// nothing } 

    } 

Pruébalo!

13

Este problema se produce cuando se intenta mostrar un cuadro de diálogo después de salir de Activity.

Acabo de resolver este problema simplemente escribiendo el siguiente código:

public void onDestroy(){ 
super.onDestroy(); 
if(progressDialog!=null) 
if(progressDialog.isShowing()){ 
progressDialog.cancel(); 
} 

} 

Básicamente, a partir del cual la clase que comenzó progressDialog, anular onDestroy() método y hacerlo de esta manera. Se solucionó La actividad ha filtrado la ventana problema.

2

el fin de manejar vistas invisibles, no se puede utilizar isShowing() y debe comprobar si el archivo adjunto propia ventana en su OnDestroy()

if (pDialog.getWindowToken() != null) 
{ 
    pDialog.dismiss(); 
} 

o en mi caso, yo no utilizaba un cuadro de diálogo, sino una ventana personalizada agregada por el WindowManager, que era (posiblemente) invisible.

if (test_service_overlay != null) { 
    if (test_service_overlay.getWindowToken() != null) { 
     WindowManager windowManager = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE); 
     windowManager.removeViewImmediate(test_service_overlay); 
    } 
} 
+0

¿Qué es test_service_overlay? –

0

También puedes solicitar "dialog.isIndeterminate()". Funciona bien.

Cuestiones relacionadas