Mi problema es similar al this 2 year old question, solo estoy publicando el mismo problema para obtener las respuestas actualizadas, ya que muchas cosas han cambiado en dos años.¿Cómo puedo mostrar un diálogo sobre la actividad actualmente visible en android?
Estoy desarrollando una aplicación para dispositivos GingerBread +, tengo muchas actividades y en el fondo recibo algunos datos del servidor. Ahora, en función de esos datos, en algunos casos necesito mostrar un Dialog
al usuario. El problema es ¿Cómo puedo saber cuál es la actividad más avanzada?
Lo he intentado, he intentado dar el getApplicationContext()
mientras Dialog
creación, sin embargo, que no está funcionando. Lanzando alguna excepción.
¿Una solución? (Realmente lo odio), Una solución podría ser realizar un seguimiento de la actividad actualmente visible al tener una variable en la clase Application
y configurarla en onResume()
de cada actividad. Realmente no quiero hacer esto libro de mantenimiento si su son formas más inteligentes para lograr esto y estoy seguro de su son formas más inteligentes para lograr esto,
Mi pregunta es sencilla,
¿Cómo puedo mostrar un cuadro de diálogo en ¿Actividad actualmente visible?, para que pueda dar esa referencia al AlertDialog.Builder, que creo que hará mi trabajo ... Si no es así, ¿Cómo puedo mostrar un diálogo en la parte superior de la actividad?
Editar, creo un diálogo sencillo usando siguiente código privada View.OnClickListener cancelClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
LoginActivity.this);
// set title
alertDialogBuilder.setTitle("Roobroo will exit..");
// set dialog message
alertDialogBuilder
.setMessage("Are you sure you want to exit ?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// if this button is clicked, close
// current activity
LoginActivity.this.finish();
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
// TODO Write the code to exit from the app, (gracefull exit)
Log.i(LOG_CAT, "Cancel Button is clicked");
}
};
Excepción usando AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder ( getApplicationContext()); me da siguiente excepción,
06-11 14:09:16.732: E/AndroidRuntime(1005): FATAL EXCEPTION: main
06-11 14:09:16.732: E/AndroidRuntime(1005): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.ViewRoot.setView(ViewRoot.java:531)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.app.Dialog.show(Dialog.java:241)
06-11 14:09:16.732: E/AndroidRuntime(1005): at com.argusoft.roobrooAndroid.activities.LoginActivity$3.onClick(LoginActivity.java:127)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.View.performClick(View.java:2485)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.view.View$PerformClick.run(View.java:9080)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.os.Handler.handleCallback(Handler.java:587)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.os.Handler.dispatchMessage(Handler.java:92)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.os.Looper.loop(Looper.java:123)
06-11 14:09:16.732: E/AndroidRuntime(1005): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-11 14:09:16.732: E/AndroidRuntime(1005): at java.lang.reflect.Method.invokeNative(Native Method)
06-11 14:09:16.732: E/AndroidRuntime(1005): at java.lang.reflect.Method.invoke(Method.java:507)
06-11 14:09:16.732: E/AndroidRuntime(1005): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-11 14:09:16.732: E/AndroidRuntime(1005): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-11 14:09:16.732: E/AndroidRuntime(1005): at dalvik.system.NativeStart.main(Native Method)
¿Qué excepción obtienes con getApplicationContext()? –
por favor muestra un código. ¿Qué has hecho hasta ahora? – Dhruvisha
Bueno, puede traer una actividad adicional que sea transparente y pueda mostrar un diálogo sobre esa actividad. Escriba todos los códigos para el diálogo en la actividad y cada vez que necesite mostrar el diálogo simplemente lleve la actividad al frente. – Rasel