我创建了一个AlertDialog,它运行良好。它正在消失,如果我按下:
1) 转义键盘按钮或
2) 使用鼠标后退按钮
为了使它即使在上述条件下也能保持专注,我在构建时添加了".setCanceable(false)"语句。但是,我仍然看到对话消失了。问题出在哪里?请帮忙
添加的代码:
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setCancelable(false)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
环境:XP Professional上的Android 4.0。
这是您的完整代码吗?那么请更改您的代码,以便像这个一样设置setCancelable(false)
void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(
R.string..alert_dialog_two_buttons_title);
newFragment.setCancelable(false);
newFragment.show(getFragmentManager(), "dialog");
}
您的对话框被设置为不可取消,但您的主机片段仍然是可取消的。用setCancelable(false)
设置碎片。
dialog.setCanceledOnTouchOutside(false);
setCanceledOnTouchOutside(boolean)
设置在窗口边界之外触摸时是否取消此对话框。如果设置为true,则对话框设置为可取消(如果尚未设置)。
另一个工作示例:
步骤1
创建类:
public class DialogActivity extends android.app.DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.myMessage);
setCancelable(false);
return builder.create();
}
}
步骤2
将方法添加到Activity
:
private boolean showDialog() {
FragmentManager manager = getFragmentManager();
DialogActivity dialogActivity;
dialogActivity = new DialogActivity();
dialogActivity.show(manager, "DialogActivity");
return true;
}
步骤3
需要显示对话框时调用showDialog()
实现"setCancelable"最简单的方法是在活动中调用对话框时实现相同的方法;这样,就不会直接在对话框类中。
Dialog myDialog = new Dialog();
myDialog.setCancelable( false );
myDialog.show( getSupportFragmentManager(),"dialog" );
return true;
在对话框中片段
已使用:-
dialog.setCanceledOnTouchOutside(false)
在Kotlin中使对话框不可丢弃
dialog.isCancelable = false
根据您的AlertDialog
类型,您可以:
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.MyAlertDialogLayout).setCancelable(false);
或
AlertDialog alertDialog = builder.create();
alertDialog.setCancelable(false);
builder.setTitle("There's a problem")
.setMessage(error)
.setCancelable(true)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setNegativeButton("", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.show();
});