Saya mendapatkan pengecualian Android berikut saat mencoba membuka dialog. Adakah yang bisa membantu saya memahami apa yang sedang terjadi dan bagaimana saya bisa memperbaiki masalah ini?
android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:509)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:241)
Jawaban:
Saya menebak - apakah Anda mencoba membuat Dialog dengan konteks aplikasi? Sesuatu seperti ini:
new Dialog(getApplicationContext());
Ini salah. Anda perlu menggunakan konteks Aktivitas.
Anda harus mencoba seperti:
new Dialog(YourActivity.this);
sumber
getActivity()
@SagarDevangaAnda dapat terus menggunakan
getApplicationContext()
, tetapi sebelum digunakan, Anda harus menambahkan tanda ini:,dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
dan kesalahan tidak akan ditampilkan.Dan jangan lupa untuk menambahkan izin:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
sumber
Dalam kasus saya, saya mencoba membuat dialog saya seperti ini:
new Dialog(getApplicationContext());
Jadi saya harus mengganti untuk:
new Dialog(this);
Dan itu berfungsi dengan baik untuk saya;)
sumber
MyActivity.class
bukanthis
karenathis
mengacu pada objek yang berbeda.this
akan memastikan AndaDialog
mewarisi tema Anda.Cobalah
getParent()
di tempat argumencontext
sepertinew AlertDialog.Builder(getParent());
Berharap itu akan berhasil, itu berhasil untuk saya.sumber
this.parent.getActivity().getApplicationContext()
tetapithis.parent.getActivity()
berhasil.Saya menebak - apakah Anda mencoba membuat Dialog menggunakan.
getApplicationContext() mContext which is passed by activity.
Jika Anda menampilkan dialog kelas non aktivitas maka Anda harus meneruskan aktivitas sebagai parameter.
Activity activity=YourActivity.this;
Sekarang akan bekerja dengan baik.
Jika Anda menemukan masalah, beri tahu saya.
sumber
Saya mencoba dengan ini di bidang konteks:
this.getActivity().getParent()
dan itu bekerja dengan baik untuk saya. Ini dari kelas yang diturunkan dari "Fragmen":
public class filtro extends Fragment{...
sumber
Halo jika Anda menggunakan adaptor mungkin ada kesempatan.
Semua yang perlu Anda ketahui saat Anda menggunakan dialog apa pun di adaptor, getContext (), konteks, atau aktivitas suatu saat tidak akan berfungsi.
Berikut adalah trik yang saya gunakan di
v.getRootView().getContext()
mana v adalah objek tampilan yang Anda referensikan.Misalnya.
@Override public void onClick(View v) { // TODO Auto-generated method stub new DatePickerDialog(v.getRootView().getContext(), date, myCalendar .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show(); } }); If you are getting this problem because of alert dialog. Refer [here][1] But it is same concept. [1]: https://stackoverflow.com/questions/6367771/displaying-alertdialog-inside-a-custom-listadapter-class
sumber
Saya mendapat pengecualian yang sama. apa yang saya lakukan untuk memperbaikinya adalah dengan melewatkan contoh dari dialog sebagai parameter ke dalam fungsi dan menggunakannya sebagai ganti hanya memberikan konteks kemudian menggunakan getContext (). solusi ini memecahkan masalah saya, semoga dapat membantu
sumber
Saya mendapat pengecualian ini, ketika saya mencoba membuka Progress Dialog di bawah Plugin Cordova dengan menggunakan dua kasus di bawah ini,
ProgressDialog baru (this.cordova.getActivity (). getParent ());
ProgressDialog baru (this.cordova.getActivity (). getApplicationContext ());
Nanti berubah seperti ini,
ProgressDialog baru (this.cordova.getActivity ());
Ini bekerja dengan baik untuk saya.
sumber
Gunakan ini dan konteks tidak berhasil untuk saya..tapi MyActivityName.ini berhasil. Semoga ini bisa membantu siapa saja yang membutuhkannya.
sumber
Saya memecahkan kesalahan ini dengan menambahkan di bawah izin pengguna di AndroidManifest.xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Juga, Inisialisasi dialog Peringatan dengan Nama Aktivitas:
AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this);
Untuk Lebih Jelasnya, kunjungi ==> Cara membuat Dialog Alert di Android
sumber