Il mio problema è simile a this 2 year old question, sto solo postando lo stesso problema per ottenere le risposte aggiornate, poiché molto è cambiato in due anni.Come posso visualizzare una finestra di dialogo su Attività attualmente visibile su Android?
Sto sviluppando un'applicazione per dispositivi GingerBread +, ho molte attività e in background ricevo alcuni dati dal server. Ora, in base a questi dati, in alcuni casi ho bisogno di mostrare un Dialog
all'utente. Il problema è Come faccio a sapere quale è la maggior parte delle attività correnti?
Quello che ho cercato, ho provato dando il getApplicationContext()
mentre Dialog
creazione, tuttavia, che non funziona. Lanciare qualche eccezione.
Una soluzione? (Lo odio davvero), Una soluzione potrebbe essere quella di tenere traccia dell'attività attualmente visibile avendo una variabile nella classe Application
e impostandola su onResume()
di ogni attività. Io davvero non voglio fare questo contabilità se loro sono modi più intelligenti per raggiungere questo obiettivo e sono sicuro loro sono modi più intelligenti per raggiungere questo obiettivo,
La mia domanda semplice è,
Come posso visualizzare una finestra su Attività attualmente visibile?, In modo che io possa dare quel riferimento all'AlertDialog.Builder, che penso svolgerà il mio lavoro .. Se non di Come posso visualizzare una finestra di dialogo sull'attività più in alto?
Edit, crea un dialogo semplice utilizzando seguente codice privato 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");
}
};
Eccezione utilizzando AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder ( getApplicationContext()); mi dà seguente eccezione,
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)
Quale eccezione si ottiene con getApplicationContext()? –
si prega di mostrare un po 'di codice. Che cosa hai mai fatto finora? – Dhruvisha
Bene, puoi portare un'attività extra che è trasparente e può mostrare la finestra di dialogo su quell'attività. Scrivi tutti i codici per la finestra di dialogo nell'attività e ogni volta che devi mostrare la finestra di dialogo porta l'attività in primo piano. – Rasel