Как отобразить AlertDialog в фрагменте?

Я хочу отобразить диалоговое окно предупреждения в своем приложении. Я использую фрагменты. Я попробовал приведенный ниже код:

AlertDialog ad = new AlertDialog.Builder(context) .create(); ad.setCancelable(false); ad.setTitle(title); ad.setMessage(message); ad.setButton(context.getString(R.string.ok_text), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); ad.show(); 

Но он сбой и ошибка в logcat была:

04-18 15: 23: 01.770: E / AndroidRuntime (9424): android.view.WindowManager $ BadTokenException: Невозможно добавить нулевой токен окна не для приложения

Из Интернета я узнал, что авария связана с проблемой контекста. Я дал контекст как

 context = this.getActivity().getApplicationContext(); 

Я не знаю, в чем проблема с этим. Кто-нибудь может мне помочь?

Solutions Collecting From Web of "Как отобразить AlertDialog в фрагменте?"

Замените context с помощью getActivity() .

ApplicationContext не должен использоваться для таких задач, как создание диалоговых окон. Поскольку вы находитесь в фрагменте, вы можете вместо этого получить Activity-Context, просто вызвав метод Fragments getActivity() .

Дополнительная информация об этом вопросе (AlertDialog во фрагменте, управляемом внутри события):

Если вы вызываете AlertDialog в течение события, такого как onClick (View v) или onLongClick (View v), вы можете использовать

 public boolean onClick(View v) { ... AlertDialog.Builder alertBuilder = new AlertDialog.Builder(v.getContext()); ... } 

Попытайтесь использовать DialogFragment, DialogFragment лучше, когда вы используете фрагменты

Я использовал его в адаптере внутри listView, поэтому я не мог использовать getActivity() . Чтобы заставить его работать, я использовал getActivity() для контекста в создании адаптера во фрагменте:

 this.adapter = new myAdapter(getActivity(), factory); 

Позже в другом классе (классе адаптера) я смог использовать getContext() и он сработал.

Вы можете попробовать это или использовать DialogFragment

 private void showAlert(final int position) { new AlertDialog.Builder(getActivity().getApplicationContext()) .setTitle("Delete entry") .setMessage("Are you sure you want to delete this entry?") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // deleteSuggestions(position); } }) .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // do nothing } }) .setIcon(android.R.drawable.ic_dialog_alert) .show(); } 
  AlertDialog alert= null; AlertDialog.Builder build= new AlertDialog.Builder(getActivity()); build.setTitle("title"); build.setItems(stringarrayname, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub //Toast.makeText(getActivity(), "hi", Toast.LENGTH_SHORT).show(); } }); build.create().show();