如何为 android 后退按钮添加 onClickListener?

How to add onClickListener for the android BACK button?

我正在尝试通过在按下 android 的后退按钮时用对话框提示用户来实现完全关闭应用程序的功能。我所说的后退按钮是指智能手机通常位于设备左下方的实际物理按钮 android。 activity 功能将在其中发生,是应用程序的最后一个 activity 活动,所有其他已使用 finish() 关闭。通常,如果用户在这种情况下按下后退按钮,它将关闭应用程序但不会终止应用程序。在下面的代码中,我使用 finishAndRemoveTask() 来终止 activity。没有对话框,这工作正常。但是,当尝试添加对话框并在按下肯定按钮时调用 finishAndRemoveTask 时,应用程序会显示对话框 0.2 秒然后关闭,但不会终止。

@Override
    public void onBackPressed() {
        super.onBackPressed();
        displayClosingAlertBox();
    }

    private void displayClosingAlertBox()
    {
        new AlertDialog.Builder(ProfileActivity.this)
                .setIcon(android.R.drawable.star_on)
                .setTitle("Exiting the Application")
                .setMessage("Are you sure you want to exit?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i("ON STOP: ", "YES");
                        finishAndRemoveTask();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    }

如果您不想触发 onBackPressed() 的默认行为,请不要调用 super.onBackPressed()

这可能是您需要的,只需删除 onBackPressed()

中的 super.onBackPressed()
@Override
    public void onBackPressed() {
     //   super.onBackPressed(); Remove this line
        displayClosingAlertBox();
    }

    private void displayClosingAlertBox(){
        new AlertDialog.Builder(ProfileActivity.this)
                .setIcon(android.R.drawable.star_on)
                .setTitle("Exiting the Application")
                .setMessage("Are you sure you want to exit?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i("ON STOP: ", "YES");
                        finishAndRemoveTask();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    }

此外,您可以通过在 onBackPressed()

中检查这样的标志来选择应用是否需要显示对话框
@Override
public void onBackPressed() {
  if(isShowDialog){
     displayClosingAlertBox();
  } else {
     super.onBackPressed()
  }
}