Android 取消带有自定义布局的 alertDialog

Android cancel alertDialog with custom layout

我正在创建一个带有自定义布局的警告对话框,我想在按下其中一个布局按钮时取消该对话框。

            LayoutInflater layoutInflater = LayoutInflater.from(GroupAdminOptions.this);
            View alertView = layoutInflater.inflate(R.layout.change_group_name, null);

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(GroupAdminOptions.
                    this);
            final EditText userInput = (EditText) alertView.findViewById(R.id.editTextUserInput);
            Button okButton = (Button) alertView.findViewById(R.id.okButton);
            Button cancelButton = (Button) alertView.findViewById(R.id.cancelButton);
            okButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.d("QQQ","" + userInput.getText());
                }
            });
            cancelButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.d("QQQ","cancel");
                }
            });
            alertDialogBuilder.setView(alertView);
            AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.show();

当我按下取消按钮时可以取消alertDialog吗?

您必须将 AlertDialog 作为全局变量,然后您可以在 onClick() 方法中使用 AlertDialog 然后关闭它。

在将 alertDialog 声明为全局变量后尝试此代码。

cancelButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.d("QQQ","cancel");
                    alertDialog.dismiss();
                }
            });

希望对您有所帮助!

尝试在调用 alertDialogBuilder.show() 后定义 OnClickListeners,然后您可以从其中调用 alertDialog.dismiss()。例如

        final AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();

        Button okButton = (Button) alertView.findViewById(R.id.okButton);            
        okButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("QQQ","" + userInput.getText());
                alertDialog.dismiss();
            }
        });

        Button cancelButton = (Button) alertView.findViewById(R.id.cancelButton);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("QQQ","cancel");
                alertDialog.dismiss();
            }
        });

It is possible to cancel alertDialog when I press cancel button?

是的,您需要在 cancelButton.setOnClickListener(...)

中调用 dialog.dismiss()