尝试在我的Android应用中实施退出确认

时间:2010-12-07 22:06:20

标签: android user-interface

我已经发现您无法覆盖Android手机上的“主页”按钮。它退出应用程序,它总是退出应用程序,它不会打扰任何namby-pamby确认。我想我理解谷歌的推理 - 但我确实认为这有点短视......

无论如何,(在我了解Home按钮之前),我设置了我的应用程序,以便用户可以通过Options菜单退出应用程序 - 使用onCreateOptionsMenu()和XML文件,我设置了一个简单的弹出窗口按下菜单按钮时显示的菜单。其中一个选择是退出,它运行正常。

然而,在我看来,在退出流程中添加确认对话框可能是个好习惯(即使它也可能被认为是多余的)。所以,我创建了一个名为“你想退出吗?”的AlertDialog。以及是和否按钮......

按钮的单击侦听器很简单,只需将exitConfirm(布尔值)设置为true或false即可。处理Exit菜单选项的代码然后在我的应用程序之后清理并执行finish()或不执行取决于exitConfirm的状态...

不幸的是,它完全不起作用...退出案例的onOptionsItemSelected()中的所有代码都会执行,然后显示对话框!!我想我应该看到即将到来。我想如果我继续喋喋不休,我会想出一个完成这个的方法,但我想我会向社区提出建议 - 所以,是否有人建议顺利退出Android应用程序方式包括获得用户确认的步骤??

谢谢, R上。

3 个答案:

答案 0 :(得分:6)

首先 - 这是一种可怕的做法。要求确认可能是桌面应用程序上的一个不错的选择,但您正在编写移动应用程序。这不一样。实际上,我需要用粗体写出来:

您没有编写桌面应用程序。

我建议:没有闪屏。没有退出选项。绝对没有退出确认。 Here是一个很好的问题。

对于您的问题:使用setPositiveButton和setNegativeButton来处理按钮。

答案 1 :(得分:4)

简短回答:

您应该阅读:When to Include an Exit Button in Android Apps

答案很长: 你可以尝试这样的事情:

protected Dialog onCreateDialog(int id) {
        Dialog dialog = null;

        switch (id) {
        case MENU_QUIT:
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(getString(R.string.main_screen_quit_text))
                    .setCancelable(false)
                    .setPositiveButton(
                            getString(R.string.main_screen_quit_yes),
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {

                                    moveTaskToBack(true);
                                }
                            })
                    .setNegativeButton(getString(R.string.main_screen_quit_no),
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            });
            AlertDialog alert = builder.create();
            return alert;
        default:
            dialog = null;
        }
        return dialog;
    }

答案 2 :(得分:2)

显然,在Android应用中有一个退出按钮(或菜单项,或其他)通常被认为并不酷。显然,这是因为你的应用程序并没有真正退出。它只是最小化了,并且可能是操作系统最终会处理它。

然而,如果你做的事情需要一定程度的清理,那么我认为这就是我所知道的:

  1. 要特别注意各种Android“生命周期方法”,尤其要解决它们的问题。生命周期方法包括onCreate(),onStart(),onResume(),onPause()和onStop()。还有onDestroy() - onCreate()的补充 - 但我目前没有使用它。

  2. 这些方法是为响应各种事件而调用的(比如按Home键),但在我的情况下,最重要的是最小化应用程序调用onPause()并最大化它调用onResume()。因此,我需要调用我的设置并从这些位置拆除方法,而不是来自onCreate()和onDestroy()。

  3. 有一个名为finish()的函数,我曾经在我的代码中使用过。现在只有在被调用的方法中才能处理与外部设备的通信丢失。我相信调用finish()的结果正是按下Home按钮的结果 - 所以,这只是一种在软件中“按下”主页按钮的方法。

  4. 对所有这些的冗长结论是Home按钮绝对会隐藏您的应用程序从用户的视图。你无法陷入这种关键的压力 - 不管你想要添加什么样的东西,“你确定吗?”功能。然而,应用程序已被最小化,而不是关闭,这可能是好的或坏的。如果你已经正确编写了启动和关闭代码(并将其添加到正确的生命周期方法中),那么你就不会搞砸了,并且一旦他们学会了,你的用户就可以轻松地返回你的应用程序长按主页按钮以查看最小化应用程序列表。

    运气好的话,我想,他们会把自己的挫折归咎于谷歌,而不是归咎于你......