如何在片段中显示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();