Mój problem jest podobny do this 2 year old question, po prostu ponownie zamieszczam ten sam problem, aby uzyskać zaktualizowane odpowiedzi, ponieważ wiele zmieniło się w ciągu dwóch lat.Jak mogę wyświetlić okno dialogowe Na bieżąco widoczną aktywność na Androidzie?
Pracuję nad aplikacją dla urządzeń GingerBread +, mam wiele działań iw tle otrzymuję dane z serwera. Teraz, w oparciu o te dane, w niektórych przypadkach muszę pokazać użytkownikowi: Dialog
. Problem polega na tym, w jaki sposób mogę sprawdzić, który z obecnych działań jest największy?
Co próbowałem, Próbowałem dając getApplicationContext()
while Dialog
tworzenie jednak, że nie działa. Rzucanie wyjątku.
Rozwiązanie? (Naprawdę go nienawidzę), Rozwiązaniem może być śledzenie aktualnie widocznej aktywności poprzez posiadanie zmiennej w klasie Application
i ustawienie jej na onResume()
dla każdej aktywności. I naprawdę nie chcę robić tego księgowości jeśli ich są mądrzejsze sposoby osiągnięcia tego celu i jestem pewien ich są mądrzejsze sposoby osiągnięcia tego celu,
Moje pytanie jest proste,
Jak mogę wyświetlić okno na Aktualnie widoczna aktywność?, tak, że mogę podać to odwołanie do AlertDialog.Builder, który moim zdaniem wykona moją pracę. Jeśli nie, to Jak mogę wyświetlić okno dialogowe na najwyższym Aktywności?
Edycja tworzę prosty dialog używając następującego kodu prywatny 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");
}
};
Wyjątek użyciu AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder ( getApplicationContext()); daje mi następujący wyjątek,
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)
Jaki wyjątek uzyskuje się dzięki funkcji getApplicationContext()? –
proszę pokazać kod. Co dotychczas zrobiłeś? – Dhruvisha
Cóż, możesz przynieść dodatkową aktywność, która jest przezroczysta i może wyświetlać okno dialogowe na temat tej aktywności. Wszystkie kody dla okna dialogowego w działaniu i kiedy tylko chcesz wyświetlić okno dialogowe, po prostu przenieś aktywność z przodu. – Rasel