Me sale el siguiente Android excepción cuando intento abrir un cuadro de diálogo. Por favor alguien puede ayudarme a entender lo que está pasando y cómo puedo solucionar este problema?

android.view.WindowManager$BadTokenException: 
  Unable to add window -- token null is not for an application
    at android.view.ViewRoot.setView(ViewRoot.java:509)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    at android.app.Dialog.show(Dialog.java:241)
InformationsquelleAutor michael | 2011-10-28

11 Comentarios

  1. 419

    Supongo – que están tratando de crear el Diálogo con el contexto de una aplicación? Algo como esto:

    new Dialog(getApplicationContext());

    Esto es incorrecto. Usted necesidad de utilizar una Actividad de contexto.

    Tienes que tratar como:

    new Dialog(YourActivity.this);
    • Gracias. Pero yo no uso el nuevo cuadro de Diálogo(getApplicationContext()); yo sólo uso el ‘ new AlertDialog.Generador(mContext);’ donde mContext es un referente para una actividad.
    • Luego mContext debe ser MyActivity.este.
    • El android de google docs (developer.android.com/guide/topics/ui/dialogs.html#CustomDialog) para crear un cuadro de diálogo personalizado tener este error. Contexto mContext = getApplicationContext(); Diálogo de diálogo = nuevo cuadro de Diálogo(mContext); que Su corrección se lleva al cuadro de Diálogo cuadro de diálogo = nuevo cuadro de Diálogo(este); lo Que funciona! Gracias
    • developer.android.com/guide/topics/ui/dialogs.html ha sido fijo (desde hace rato). Sólo señalar esto para referencia. El modelo ha sido mejorado también. 🙂
    • Siempre Crear Cada Diálogo con el pasar de los YourActivity.this
    • qué hacer si quiero un diálogo sobre fragmento
    • Uso getActivity() @SagarDevanga
    • Gracias @ツFellinLovewithAndroidツ que funcionó, pero no entiendo ¿por qué estamos pasando de la actividad cuando se requiere de contexto
    • debido a que una Actividad es también un Contexto. Es una subclase de un contexto.

  2. 34

    Puede continuar el uso de getApplicationContext(), pero antes de su uso, usted debe agregar este indicador: dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT), y el error no mostrará.

    Y no te olvides de añadir permiso:

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    • me pasé 2 horas para esto, guardó mi tiempo… Masa….
    • Sí, es bastante simple. Y no te olvides de añadir permiso, he editado justo ahora.
    • uso getActivity()
    • No se puede utilizar getActivity() en un RecyclerAdapter
    • Que es impresionante 🙂
    • ¿Cómo agregar la bandera?

  3. 12

    En mi caso yo estaba tratando de crear mi cuadro de diálogo como este:

    new Dialog(getApplicationContext());

    Así que he tenido que cambiar por:

    new Dialog(this);

    Y funciona muy bien para mí 😉

    • Su respuesta es correcta, sin embargo, sólo funciona cuando se está en el ámbito de la actividad. Si usted está en un interior alcance, usted tiene que utilizar MyActivity.class en lugar de this porque this se refiere a un objeto diferente.
    • También, this asegúrese de que su Dialog hereda de su tema.
  4. 12

    Intentar getParent() en el argumento lugar de context como new AlertDialog.Builder(getParent()); la Esperanza de que funcione, a mí me funcionó.

    • ¿Por qué utilizar getParent()?, lo que significa?
    • Cuando se muestra un cuadro de diálogo en otra clase que no se extiende la Actividad de la clase, de modo que usted no puede conseguir el contexto de la clase que se está extendiendo la Actividad. Así que para conseguir el contexto dentro de la clase donde están tratando de mostrar el cuadro de diálogo, pero que no se extiende la Actividad puedes utilizar el getParent (), que devuelve el contexto de que una actividad superior.
    • Gracias @PriyankJoshi , usted salvó mi día, también se resuelve la extraña excepción de «Android no se puede agregar de la ventana no es válido; es su actividad a correr?».
    • ¿Cómo podría yo uso el getParent() ?
    • Gracias! Funcionó en mi caso. Me estaba llamando this.parent.getActivity().getApplicationContext() pero this.parent.getActivity() hizo el truco.
  5. 3

    Supongo – que están tratando de crear el Diálogo de usar.

     getApplicationContext()
     mContext which is passed by activity.

    si la visualización de diálogo, no de la actividad de la clase, a continuación, usted tiene que pasar a la actividad como un parámetro.

    Activity activity=YourActivity.this;

    Ahora va a ser un gran trabajo.

    Si usted encuentra cualquier problema, a continuación, hágamelo saber.

  6. 2

    He probado con esto en el contexto de campo:

    this.getActivity().getParent()

    y funciona muy bien para mí. Este era de una clase que extiende de «Fragmento»:

    public class filtro extends Fragment{...
  7. 1

    Tengo el mismo excepción. ¿qué puedo hacer para solucionar esto es pasar de la instancia de diálogo
    como parámetro en la función y utilizar en lugar de pasar sólo contexto, a continuación, utilizando getContext(). esta solución resuelve mi problema, espero que le puede ayudar

  8. 1

    Hola, si usted está utilizando el adaptador de que puede haber una posibilidad.

    Todo lo que usted necesita saber cuando usted utiliza cualquier cuadro de diálogo en el adaptador,getContext(),el contexto o la actividad no es el trabajo en algún momento.

    Aquí está el truco que he usado
    v.getRootView().getContext()
    donde v es el objeto de la vista que se hace referencia.

    Por ejemplo.

    
                @Override
                public void onClick(View v) {
                    //TODO Auto-generated method stub
                    new DatePickerDialog(v.getRootView().getContext(), date, myCalendar
                            .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                            myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                }
            });  
    If you are getting this problem because of alert dialog.
    Refer [here][1] But it is same concept.
    
    
      [1]: https://stackoverflow.com/questions/6367771/displaying-alertdialog-inside-a-custom-listadapter-class
    • Gracias ! para guardar mi precioso tiempo !! (^_^)
  9. 0

    Tengo esta excepción, cuando intento abrir el cuadro de Diálogo de Progreso en virtud de Córdoba Plugin utilizando por debajo de los dos casos,

    1. nueva ProgressDialog(este.córdoba.getActivity().getParent());

    2. nueva ProgressDialog(este.córdoba.getActivity().getApplicationContext());

    Más tarde cambiado como este,

    nueva ProgressDialog(este.córdoba.getActivity());

    Su trabajo bien para mí.

  10. 0

    Usar este contexto y no funcionó para mí..pero MyActivityName.esto funcionó. Espero que esto ayude a alguien que lo necesita.

  11. 0

    He solucionado este error por agregar a continuación el usuario permiso en AndroidManifest.xml

     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

    También, Inicializar Alerta de diálogo con el Nombre de la Actividad:

    AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this);

    Para obtener Más Detalles, visita==> Cómo crear Alerta de Diálogo en Android

Dejar respuesta

Please enter your comment!
Please enter your name here