隐藏()后的Android AlertDialog show()

时间:2018-03-14 02:02:59

标签: android alertdialog

我遇到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());
}

5 个答案:

答案 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();