我是一名新的Android开发人员,最近遇到了一个问题。
背景是我需要在后端asyncTask完成时显示AlertDialog
。但是,在很长一段时间asyncTask之后,活动可能 GC ,因此AlertDialog的输入参数的上下文为null。是否有解决此问题的解决方法。
我使用此功能显示对话框:
public static Dialog showDialog(
Context ctx, int themeId, String title, String message,
int okStrId, android.content.DialogInterface.OnClickListener okListener,
int cancelStrId, android.content.DialogInterface.OnClickListener cancelListener) {
if (ctx != null) {
AlertDialog.Builder builder;
if (themeId > 0)
builder = new AlertDialog.Builder(new ContextThemeWrapper(ctx, themeId));
else
builder = new AlertDialog.Builder(ctx);
if (title != null)
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton(ctx.getString((okStrId < 0) ? R.string.ok : okStrId),
(okListener != null) ? okListener : sDefaultDialogListener);
if (cancelListener != null)
builder.setNegativeButton(ctx.getString((cancelStrId < 0) ? R.string.cancel : cancelStrId), cancelListener);
else {
builder.setCancelable(false);
}
AlertDialog ad = builder.create();
ad.show();
return ad;
}else {
Context context = SuccessFactorsApp.getAppContext();
DialogActivity.launchActivity(ctx,themeId,title,message,okStrId,okListener,cancelStrId,cancelListener);
return new AlertDialog.Builder(context).create();
}
}
我尝试使用Activity来模拟对话框但不确定如何处理DialogInterface.OnClickListener
。
答案 0 :(得分:0)
将此添加到您的代码中:
if(!((Activity) context).isFinishing())
{
//show dialog
}
答案 1 :(得分:0)
运行asyntask并执行后台活动时会被杀死并收集垃圾。完成任务后,您无法显示没有活动的对话框。您可以尝试
1.通过添加以下权限显示您的对话框。将此权限添加到清单
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
在显示对话框时,在dialog.show()
之前添加这行代码alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
2.完成任务启动所需活动和打开应用程序
3.使用Toast而不是对话框。