Vấn đề của tôi tương tự như this 2 year old question, tôi chỉ đăng lại cùng một vấn đề để nhận được câu trả lời được cập nhật, vì rất nhiều đã thay đổi trong hai năm.Tôi làm cách nào để hiển thị hộp thoại trên Hoạt động hiện tại trên Android?
Tôi đang phát triển ứng dụng cho thiết bị GingerBread +, tôi có nhiều hoạt động và trong nền tôi nhận được một số dữ liệu từ máy chủ. Bây giờ dựa trên dữ liệu đó trong một số trường hợp, tôi cần hiển thị một số Dialog
cho người dùng. Vấn đề là làm cách nào để biết hoạt động nào có mặt trước nhiều nhất?
Những gì tôi cố gắng, Tôi đã cố gắng đưa ra các getApplicationContext()
khi Dialog
sáng tạo, tuy nhiên đó không hoạt động. Ném một số ngoại lệ.
Giải pháp? (Tôi thực sự ghét nó), Một giải pháp có thể là theo dõi hoạt động hiện tại có thể nhìn thấy bằng cách đặt một biến trong lớp Application
và đặt nó trên onResume()
của từng hoạt động. Tôi thật sự không muốn làm cuốn sách lưu giữ này nếu họ là những cách thông minh hơn để đạt được điều này và tôi chắc chắn họ là những cách thông minh hơn để đạt được điều này,
câu hỏi đơn giản của tôi là,
Làm thế nào tôi có thể hiển thị một hộp thoại trên Hoạt động hiển thị hiện tại?, Vì vậy mà tôi có thể cung cấp cho tài liệu tham khảo để AlertDialog.Builder, mà tôi nghĩ rằng sẽ làm công việc của tôi .. Nếu không phải là Làm thế nào tôi có thể hiển thị một hộp thoại trên hoạt động trên cùng?
Chỉnh sửa, tôi có thể tạo một hộp thoại đơn giản sử dụng đoạn mã sau tin View.OnClickListener cancelClickListener = OnClickListener mới() {
@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 sử dụng AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder ( getApplicationContext()); mang lại cho tôi sau ngoại lệ,
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)
Ngoại lệ bạn nhận được với getApplicationContext() là gì? –
vui lòng hiển thị một số mã. Bạn đã làm gì cho đến nay? – Dhruvisha
Vâng, bạn có thể mang đến một hoạt động bổ sung minh bạch và có thể hiển thị hộp thoại trên hoạt động đó. Viết tất cả mã cho hộp thoại trong hoạt động và bất cứ khi nào bạn cần hiển thị hộp thoại, hãy mang hoạt động ở phía trước. – Rasel