防止 activity 由于点击操作栏中的 Up/home 而关闭?

Prevent activity from closing due to click on Up/home in action bar?

如果用户单击 Up/Home 按钮(在操作栏中,而不是实际按钮),我如何防止 activity 被关闭? 作为第一种方法,我尝试做这样的事情,但即使是模态对话框也被一扫而光:

@Override
public boolean onOptionsItemSelected(final MenuItem item) {

    final int id = item.getItemId();
    if (android.R.id.home == id) {

        (new AlertDialog.Builder(this))
                .setMessage("Do you really want to quit ?")
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // @TODO: don't stop activity
                dialog.dismiss();
            }

        }).setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // @TODO: stop activity
                        dialog.dismiss();
                    }}).show();
    }
    return super.onOptionsItemSelected(item);
}

举个例子。代码自行解释。

@Override
public boolean onOptionsItemSelected(final MenuItem item) {
    final int id = item.getItemId();
    if (android.R.id.home == id) {
        (new AlertDialog.Builder(this))
                .setMessage("Do you really want to quit ?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        finish(); // finish activity
                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .show();
        return true; // true = handled manually (consumed)
    } else {
        // Default behaviour for other items
        return super.onOptionsItemSelected(item);
    }
}

在 OptionsItemSelected 中,如果您 return true 而不是每个按钮的每个 switch case 语句中的构造函数,您的行为将是 运行,而不是默认行为。