WindowManager$BadTokenException en Android

En primer lugar, soy muy consciente de que este error se produce porque estoy tratando de llamar a la ventana/diálogo a través de un Context eso no es un Activity.

Pero no hay ninguna solución a eso. Mis requisitos son; tengo un Dialog con una hoja de estilo personalizada en un método de una clase JAVA normal. Quiero llamar a ese método desde cualquier Activity clase cuando necesito cargar el Dialog.

En mi clase de actividad, tengo el siguiente conjunto de códigos;

HomeClass homeClass = new HomeClass();
homeClass.showSplashScreen();

Luego, en mi HomeClass, tengo el siguiente conjunto de códigos;

public void showSplashScreen() {        
 splashDialog = new Dialog(HomeActivity.getAppContext(), R.style.SplashScreen);
 splashDialog.setContentView(R.layout.splash_screen);
 splashDialog.setCancelable(false);
 splashDialog.show();
}

Al mantener este diseño, ¿hay alguna forma de deshacerse de la WindowManager $ BadTokenException

Gracias

preguntado el 03 de mayo de 12 a las 11:05

Olvide mencionar getAppContext() es una referencia estática a la clase Activity. Significa que hay un segmento de código como HomeActivity.homeActivityContext = getApplicationContext(); en mi clase de Actividad y de la getAppContext devuelve esa variable. -

2 Respuestas

Voy a modificar tu código, eso quizás te sea útil...

HomeClass homeClass = new HomeClass(this);
homeClass.showSplashScreen();

En la clase Your Home ... agregue un constructor paramétrico ...

public class Home {
private Context context;
public Home(Context context){
this.context = context;
}
public void showSplashScreen() {        
splashDialog = new Dialog(context, R.style.SplashScreen);
 splashDialog.setContentView(R.layout.splash_screen);
 splashDialog.setCancelable(false);
splashDialog.show();
}

contestado el 03 de mayo de 12 a las 11:05

Pase su actividad al método showSplashScreen()...

Hazlo así..

HomeClass homeClass = new HomeClass();
homeClass.showSplashScreen(Your Actvity);

En tu clase de casa

public void showSplashScreen(Activity curActivity) {        
 splashDialog = new Dialog(curActivity, R.style.SplashScreen);
 splashDialog.setContentView(R.layout.splash_screen);
 splashDialog.setCancelable(false);
 splashDialog.show();
}

contestado el 03 de mayo de 12 a las 11:05

Esto no está funcionando. Si está bastante seguro acerca de su código, ¿puede explicar el argumento "Su actividad"? - AnujAroshA

Amigo, necesitas escribir el nombre de tu actividad como argumento en lugar de "Tu actividad"... ejemplo: HomeActivity.this - Pradeep

Sí, puedo entender eso. Pero te dará una excepción. Por cierto, ya descubrí una manera. Gracias por la respuesta. - AnujAroshA

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.