当用户按下返回按钮时提示用户

10

哪里是询问用户是否想要退出应用程序的好地方,当他们点击返回按钮时?我考虑了onPauseonStop,但这些方法会在应用程序被其他应用程序覆盖时触发。

更新: 应用程序还应该询问用户是否尝试从应用程序内的按钮退出应用程序,而不是后退硬按键。


1
你的下一个问题将是如何完全退出应用程序。 - ingsaurabh
@Saurabh Agnihotri:不,伙计。我已经知道了。而且我也知道退出应用程序不是一个好主意。我想做的是提示用户,而不是自己退出应用程序。 - Chromium
那将是伟大的+1,我不知道为什么大多数用户想关闭这个? - ingsaurabh
5个回答

16

要求用户允许关闭应用程序。

你可以按照以下方式实现;

/**
 * Exit the app if user select yes.
 */
private void doExit() {

    AlertDialog.Builder alertDialog = new AlertDialog.Builder(
            AppDemoActivity.this);

    alertDialog.setPositiveButton("Yes", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });

    alertDialog.setNegativeButton("No", null);

    alertDialog.setMessage("Do you want to exit?");
    alertDialog.setTitle("AppTitle");
    alertDialog.show();
}

询问用户是否想退出应用程序的好地方是哪里?

既然您想在用户点击返回按钮时提示用户,建议您覆盖 onBackPressed() 方法并从那里调用上述方法。

@Override
public void onBackPressed() {

    doExit();
}

正如@Martyn所建议的那样,您可以使用onKeyDown来实现相同的功能;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_BACK) {
        doExit();
    }

    return super.onKeyDown(keyCode, event);
}

应用程序还应该询问用户是否从应用程序本身的按钮退出应用程序,而不是使用返回硬键。

为此,可以从您的按钮的onClick中调用doExit()

Button exitButton = (Button)findViewById(R.id.exitButton);
exitButton.setOnClickListener(new android.view.View.OnClickListener() {

    @Override
    public void onClick(View v) {
        doExit();
    }
});


相关信息:


也许可以调用 'AppDemoActivity.super.onBackPressed()' 来代替 'finish()'。 - lopek

6

我不想退出应用程序,我只是想请求用户的同意。 - Chromium

2

最好的位置在onBackPressed中。唯一需要记住的是应用程序的行为“正常” - 也就是说,当用户按下返回键时,他们应该回到上一个屏幕 - 如果他们在主屏幕上按下返回键,则询问是否要退出应用程序是很好的。


如果用户在提示框中选择了“否”,我该如何取消应用程序的退出? - Chromium
你可以重写onKeyDown方法,这样你就有更多的控制权了。@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return false; } return super.onKeyDown(keyCode, event); } - Martyn

2
如果只有用户按下后退键(而不是主页或其他),请使用onBackPressed

文档中写道:

当活动检测到用户按下后退键时调用。默认实现仅完成当前活动,但您可以覆盖此行为以执行您想要的任何操作。

因此,如果捕获了后退键并且没有执行任何操作,则不会退出活动。如果您想退出,请使用finish()


如果用户在提示框中选择了“否”,我该如何取消应用程序的退出? - Chromium

0

这是一个相当老的问题,但它在谷歌上排名很高,所以我觉得它可能需要一个更新

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Do you want to exit the app?");

    // if user presses "Exit", then he is allowed to exit from application
    builder.setPositiveButton("Exit", (dialog, which) -> finish());

    // if user selects "Stay", just cancel this dialog and continue with app
    builder.setNegativeButton("Stay", (dialog, which) -> dialog.cancel());

    builder.create().show();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接