我创建了一个正常工作的AlertDialog。如果我按下它就会消失: 1)逃脱键盘按钮或 2)使用鼠标的后退按钮 为了使它在上述条件下保持专注,我在构建时添加了'.setCancelable(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。
this是您的完整代码吗?那么请改变你的代码来设置这样的setCancelable(false)
void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(
R.string..alert_dialog_two_buttons_title);
newFragment.setCancelable(false);
newFragment.show(getFragmentManager(), "dialog");
}
您的对话框设置为不可取消,但您的主机片段仍可取消。用setCancelable(false)
设置你的片段。
另一个工作示例:
步骤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()
dialog.setCanceledOnTouchOutside(false);
setCanceledOnTouchOutside(boolean)
设置在窗口边界外触摸时是否取消此对话框。如果设置为true,则对话框设置为可取消(如果尚未设置)。
实现“setCancelable”的最简单方法是在活动中调用对话框时实现相同的方法;那样,不是直接在对话框类中。
Dialog myDialog = new Dialog();
myDialog.setCancelable( false );
myDialog.show( getSupportFragmentManager(),"dialog" );
return true;
在Kotlin中,不允许对话
dialog.isCancelable =false