带有 EditText 和三个按钮的 AlertDialog

AlertDialog with EditText and Three buttons

所以我有这个代码,我正在尝试创建一个带有 EditTet 和三个按钮的 AlertDialog(正按钮、负按钮和中性按钮),但它不起作用,并且应用程序停止

        b5.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("UseCompatLoadingForDrawables")
        @Override
        public void onClick(View view) {
            AlertDialog.Builder boite;
            boite = new AlertDialog.Builder(MainActivity.this);
            boite.setTitle("boite de dialogue");
            boite.setIcon(getDrawable(R.drawable.warning_shield_96px));


           final EditText input = new EditText(MainActivity.this);
            input.setInputType(InputType.TYPE_CLASS_TEXT);
            boite.setView(input);

            boite.setPositiveButton("OUI", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //whatever action
                }
            });
            boite.show();
            boite.setNegativeButton("NON", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //whatever action
                }
            });
            boite.show();
            boite.setNeutralButton("CANCEL", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //whatever action
                }
            });
            boite.show();
        }
    });

无需多次调用 boite.show(),只需调用一次,如下所示:

   b5.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("UseCompatLoadingForDrawables")
            @Override
            public void onClick(View view) {
                AlertDialog.Builder boite;
                boite = new AlertDialog.Builder(MainActivity.this);
                boite.setTitle("boite de dialogue");
                boite.setIcon(getDrawable(R.drawable.warning_shield_96px));


                final EditText input = new EditText(MainActivity.this);
                input.setInputType(InputType.TYPE_CLASS_TEXT);
                boite.setView(input);

                boite.setPositiveButton("OUI", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //whatever action
                    }
                });
                boite.setNegativeButton("NON", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //whatever action
                    }
                });
                boite.setNeutralButton("CANCEL", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //whatever action
                    }
                });
                boite.show();
            }
        });

AlertDialog 使用构建器模式进行初始化,因此您可以设置不同的方法和按钮以及您喜欢的任何内容,然后当您调用 alertDialog.show() 时,它会使用您在调用之前设置的任何配置构建对象。