使用DialogInterface的onClick()方法

时间:2013-12-10 12:27:34

标签: android android-alertdialog

这是我的代码,用于初始化AlertDialog; buildexitAlertDialog.BuilderexitalertAlertDialog

buildexit=new AlertDialog.Builder(this);
buildexit.setTitle("Exit?");
buildexit.setIcon(R.drawable.ic_action_warning);
buildexit.setMessage("Do you want to really exit?");
buildexit.setPositiveButton("Yes", this);
buildexit.setNegativeButton("No", this);
exitalert=buildexit.create();

我希望在用户点击“是”按钮时使用Activity.finish()方法终止应用程序,如果单击“否”则不会发生任何事情,我还实现了android.content.DialogInterface.OnClickListener接口,方法已实施public void onClick(DialogInterface arg0, int arg1) 提前谢谢。

5 个答案:

答案 0 :(得分:14)

我知道这是一个老问题,但如果你像我一样,并因为你在google搜索而结束这里,这可能是你正在寻找的。

为避免为每个按钮创建新的DialogInterface.onClickListener(),您可以让该类实现AlertDialog.OnClickListener,然后覆盖public void onClick(DialogInterface dialog, int which)

此方法中的int which是单击的按钮或位置。有关更多详细信息,请参阅Android Reference

因此,如果要查看单击了哪个按钮,可以使用switch-case并查找常量BUTTON_NEGATIVEBUTTON_NEUTRALBUTTON_POSITIVE

示例:

// skipping package and imports
public class TestActivity extends Activity implements AlertDialog.OnClickListener {

    void createAndShowDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.title);
        builder.setMessage(R.string.message);
        builder.setPositiveButton(android.R.string.yes, this);
        builder.setNeutralButton(android.R.string.cancel, this);
        builder.setNegativeButton(android.R.string.no, this);
        builder.create().show();
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case BUTTON_NEGATIVE:
                // int which = -2
                dialog.dismiss();
                break;
            case BUTTON_NEUTRAL:
                // int which = -3
                dialog.dismiss();
                break;
            case BUTTON_POSITIVE:
                // int which = -1
                TestActivity.this.finish();
                dialog.dismiss();
                break;
    }
}

答案 1 :(得分:3)

试试这个:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            context);

        // set title
        alertDialogBuilder.setTitle("Your Title");

        // set dialog message
        alertDialogBuilder
            .setMessage("Click yes to exit!")
            .setCancelable(false)
            .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, close
                    // current activity
                    MainActivity.this.finish();
                }
              })
            .setNegativeButton("No",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, just close
                    // the dialog box and do nothing
                    dialog.cancel();
                }
            });

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

            // show it
            alertDialog.show();
        }

答案 2 :(得分:0)

AlertDialog buildexit = new AlertDialog.Builder(this)
    .setTitle("Exit?")
    .setIcon(R.drawable.ic_launcher)
    .setMessage("Do you want to really exit?")
    .setPositiveButton("Yes", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            MainActivity.this.finish();                
        }
    })
    .setNegativeButton("No", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();                
        }
    })
    .create();

    buildexit.show();

答案 3 :(得分:0)

使用 Kotlin 和 lambdas:

val alertDialog = AlertDialog.Builder(atakContext)
alertDialog.setTitle("Error!")
alertDialog.setMessage("Please ")

alertDialog.setPositiveButton("OK") { dialog: DialogInterface?, whichButton: Int ->
    //Do something
}
alertDialog.show()

答案 4 :(得分:0)

您可以使用 Lambda 来缩短代码。 Java

AlertDialog.Builder buildexit = new AlertDialog.Builder(this);
buildexit.create();
buildexit.setTitle("Exit?");
buildexit.setIcon(R.drawable.ic_action_warning);
buildexit.setMessage("Do you want to really exit?");
buildexit.setPositiveButton("Yes", (dialog, id) -> 
{
    this.finish();
});
buildexit.setNegativeButton("No", (dialog, id) -> 
{
    //Leaving this empty will close this onClick
});
buildexit.show();