Android:将参数传递给Alert Dialog

Jas*_*per 5 android android-ui android-dialog

我正在显示一个带有确定/取消按钮的简单警报对话框.当用户单击"确定"时,会运行一些代码 - 这需要一个参数.

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
        MainActivity.this);
        alertDialogBuilder
        .setTitle("Are you sure?")
        .setCancelable(false)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                //TODO: Do something with parameter.
            }
        })
        .setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();

                    }
                });

// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();

// show it
alertDialog.show();
Run Code Online (Sandbox Code Playgroud)

如何将参数传递给AlertDialog?

sam*_*gak 10

如果你将变量声明为final那么你可以在调用AlertDialog.Builder()之前在代码中设置它,然后在onClick()中访问它,如下所示:

    final int someParameter = someValue;

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            this);
            alertDialogBuilder
            .setTitle("Are you sure?")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // Do something with parameter.
                    doSomeStuff(someParameter);
                }
            })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();

                        }
                    });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();

    // show it
    alertDialog.show();
Run Code Online (Sandbox Code Playgroud)

这样,someParameter通过函数闭包隐式传递给onClick(),因此不需要子类AlertDialog或向Activity添加额外的成员变量.