java - Android:按下后退按钮时提示用户保存更改

标签 java android

我有一个包含多个用户可编辑项目(EditText 字段、RatingBar 等)的 Activity 。如果按下返回/主页按钮并且进行了尚未保存的更改,我想提示用户。在阅读了 android 文档之后,似乎这段代码应该放在 onPause 方法中。我已经尝试在 onPause 中放置一个 AlertDialog ,但是该对话框会显示然后立即关闭,因为没有任何东西可以阻止暂停完成。

这是我目前为止的想法:

@Override
protected void onPause() {
    super.onPause();

    AlertDialog ad = new AlertDialog.Builder(this).setMessage(
            R.string.rating_exit_message).setTitle(
            R.string.rating_exit_title).setCancelable(false)
            .setPositiveButton(android.R.string.ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int whichButton) {
                            // User selects OK, save changes to db
                        }
                    }).setNeutralButton(android.R.string.cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int whichButton) {
                            // User selects Cancel, discard all changes
                        }
                    }).show();
}

我是在正确的轨道上还是有其他方法可以完成我在这里尝试做的事情?任何帮助都会很棒!

最佳答案

你没有走在正确的轨道上;你应该做的是覆盖 onKeyDown() 并监听返回键,然后覆盖默认行为:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

如果您只支持 Android 2.0 及更高版本,他们添加了一个 onBackPressed() 您可以改用:

@Override
public void onBackPressed() {
    // do something on back.
    return;
}

这个答案基本上是从 this blog post 撕下来的。如果您需要按键、兼容性支持、虚拟硬键支持或原始解决方案(如 onPreIme()),请阅读它等等

关于java - Android:按下后退按钮时提示用户保存更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459848/

相关文章:

java - 如何抛出空指针异常以及在何处抛出

android - 让 Mockito 与 RoboGuice 和 Robolectric 一起工作

Android 内部存储 - 有什么限制?

java - 如何在Firebase数据库Android上获取具有相似子节点的所有父节点?

java - 为什么 FAB 在不同的 Android 设备/操作系统版本上显示不同?

java - Xom 序列化程序丢失文本中的后续空格

java - java中的不可变类

java - Android 将日期格式从字符串更改为日期和时间分隔

android - 动态添加ImageView到View

java - IntelliJ IDEA 错误运行应用程序