我遇到AlertDialog
的问题。如果我在dialog.show()
之后拨打dialog.hide()
它将无法显示,但如果我再次拨打dialog.show()
,则一切正常。如果我连续两次调用dialog.show()
,则会始终显示对话框。
如果替换hide() -> dismiss()
它总是好的。但在我的情况下,我需要使用hide()
来保存对话框。
样品
AlertDialog dialog;
@Override
protected void onCreate(@Nullable Bundle savedState) {
super.onCreate(savedState);
setContentView(R.layout.activity_auth);
dialog = new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Text")
.setPositiveButton("Yes", (dialogInterface, which) -> onYesClicked())
.create();
Button login = findViewById(R.id.btn_login);
login.setOnClickListener(v -> dialog.show());
}
private void onYesClicked() {
dialog.hide();
}
已编辑:解决方案
private void onYesClicked() {
new Handler().post(() -> dialog.hide());
}
答案 0 :(得分:0)
如果使用hide(),可能会导致泄漏窗口错误。请看一下:Activity has leaked window that was originally added
使用dismiss()并保存消息/标题而不是整个对话框。
答案 1 :(得分:0)
如果您想使用隐藏并再次显示该对话框,请尝试以下代码:
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface d) {
dialog.show();
}
});
当你调用hide并调用show时,将调用回调。
答案 2 :(得分:0)
尝试此操作以使对话框只弹出一次:
if (dialog != null && dialog.getDialog() != null
&& dialog.getDialog().isShowing()) {
//Leave Empty here or your way
}else{
code to open a dialog
}
答案 3 :(得分:0)
在代码下面使用的onYesClicked()方法中进行一些更改。
private void onYesClicked() {
new Handler().postDelayed(new Runnable() {
// Showing message with a timer.
@Override
public void run() {
dialog.hide();
}
}, 1000);
}
答案 4 :(得分:0)
我解决了这个问题。方法hide()
单击按钮(由AlerdDialog.Builder
创建)时调用是没用的。因为系统发送MSG_DISMISS_DIALOG并自动为此对话框调用dismiss()
:
SDK代码:
// Post a message so we dismiss after the above handlers are executed
mHandler.obtainMessage(ButtonHandler.MSG_DISMISS_DIALOG, mDialogInterface)
.sendToTarget();