如何在片段中显示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:无法添加窗口 – 标记null不适用于应用程序

从互联网上我知道崩溃是由于上下文问题。 我已经给了上下文

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

我不知道这是什么问题。 有谁能够帮助我?

getActivity()replacecontext

ApplicationContext不应该用于创build对话框等任务。 正如你在一个片段中,你可以简单地通过调用Fragments getActivity()方法来获得Activity-Context。

有关此问题的更多信息(AlertDialog在片段中,在事件内部pipe理):

如果您在类似onClick(View v)或onLongClick(View v)的事件中调用AlertDialog,则可以使用

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

尝试使用DialogFragment,当使用Fragments时,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();