Mein Problem ist ähnlich wie this 2 year old question, ich bin gerade wieder das gleiche Problem zu posten, um die aktualisierten Antworten zu erhalten, da sich viel in zwei Jahren geändert hat.Wie kann ich einen Dialog auf Aktuelle Aktivität auf Android anzeigen?
Ich entwickle für eine App für GingerBread + Geräte, ich habe viele Aktivitäten und im Hintergrund erhalte ich einige Daten vom Server. Basierend auf diesen Daten muss ich in einigen Fällen dem Benutzer einen Dialog
zeigen. Problem ist: Woher weiß ich, welche aktuelle Front die meiste Aktivität ist?
Was ich versuchte, Ich habe versucht, die getApplicationContext()
während Dialog
Schöpfung zu geben, aber das funktioniert nicht. Eine Ausnahme werfen.
Eine Lösung? (Ich hasse es wirklich), Eine Lösung könnte sein, die aktuell sichtbare Aktivität zu verfolgen, indem Sie eine Variable in Application
Klasse, und setzen Sie es auf onResume()
von jeder Aktivität. Ich mag wirklich nicht, diese Buchhaltung tun, wenn ihre intelligentere Wege, dies zu erreichen, und ich bin sicher, dass sie sind intelligentere Wege, dies zu erreichen,
Meine einfache Frage ist,
Wie kann ich einen Dialog angezeigt auf Derzeit sichtbare Aktivität?, So dass ich diesen Verweis auf den AlertDialog.Builder geben kann, der meiner Meinung nach meine Aufgabe erledigen wird .. Wenn nicht als Wie kann ich einen Dialog auf oberste Aktivität anzeigen?
Bearbeiten, ich erstellen einen einfachen Dialog folgenden Code privaten 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");
}
};
Exception mit AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder ( getApplicationContext()); folgende Ausnahme gibt mir,
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)
Welche Ausnahme erhalten Sie mit getApplicationContext()? –
bitte Code anzeigen. Was hast du bisher gemacht? – Dhruvisha
Nun, Sie können eine zusätzliche Aktivität, die transparent ist, bringen und Dialog für diese Aktivität zeigen. Schreiben Sie alle Codes für den Dialog in der Aktivität und wann immer Sie Dialog zeigen müssen, bringen Sie die Aktivität in den Vordergrund. – Rasel