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

2023-12-06

我有一个包含多个用户可编辑项目(EditText 字段、RatingBar 等)的活动。如果按下后退/主页按钮并且已进行尚未保存的更改,我想提示用户。读完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;
}

这个答案基本上是从这篇博文。如果有需要请阅读long压力机,兼容性支持,支持虚拟硬盘键,或raw解决方案如onPreIme() etc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:按下“后退”按钮时提示用户保存更改 的相关文章

  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 强制 Listview 不重复使用视图(复选框)

    我做了一个定制Listview 没有覆盖getView 方法 Listview 中的每个项目都具有以下布局 联系布局 xml

随机推荐

  • Postgres:为什么使用偏移/限制的子选择性能如此糟糕

    您能帮我理解这些语句之间性能下降的原因吗 对我来说 似乎在 D E 的情况下 他首先将地址加入到所有订阅者中 最后应用偏移和限制 他到底为什么要这么做 我是否遗漏了有关子选择和偏移如何协同工作的信息 他不应该首先找到正确的偏移量 然后开始执
  • jQuery Live 可以在 Safari 上运行吗?

    我刚刚问过这个问题一小时前但对于 IE8 我被告知 JQuery Live 处理程序不支持 更改 所以我切换到 单击 这解决了我的问题 现在我发现 Safari 由于某些奇怪的原因无法使用单击 有人知道吗为什么 所以我在想我可以两者兼得吗
  • gdb:没有可用的瓶子-gdb 安装

    我尝试在我的 M1 Mac OS 11 5 2 上安装 gdb 命令 但出现了 brew 错误 gdb 没有可用的瓶子 I use brew install gdb 这是输出 Error gdb no bottle available Yo
  • 我怎样才能给eclipse更多的内存超过512M?

    我有以下设置 但是当我输入 1024 并将所有 512 替换为 1024 时 Eclipse 根本不会启动 我的 eclipse JVM 如何拥有超过 512M 的内存 startup plugins org eclipse equinox
  • 如何开发“旋转瓶子”应用程序

    我正在制作一个旋转瓶子游戏 我不知道如何通过滑动手指的速度来控制瓶子的旋转速度 我希望它像命运之轮一样工作 你刷得越快 它转得越快 我开始开发UIRotationGestureRecognizer 但我真的不认为这是最好的方法 嘿检查这个演
  • 无法读取 jar 文件中的文件

    我使用 spring boot 开发了一个应用程序 我需要读取包含电子邮件的 csv 文件 这是我的做法的一个片段 public Set
  • 如何在MySQL视图中生成序列号?

    我在Linux下使用MySQL 5 6 我有一个表可以让用户输入发件人号码和收件人号码 然后 有一个视图可以从另一个表中选择一些帐号在发件人号码和收件人号码之间的记录 最困难的问题是用户希望视图中的每条记录都有一个从 1 开始的序列号 例如
  • 有什么理由使用 css box-shadow 而不是 drop-shadow 吗?

    假设客户端兼容 是否有任何情况CSSbox shadow优于filter drop shadow From 文章这好像是drop shadow是硬件加速超集box shadow 这意味着我们基本上应该始终使用drop shadow代替box
  • C# 可以通过管道传输吗?

    我正在尝试使用 TCP 和简单的文本命令来控制网络上的程序 我最终可能会切换到二进制数据 但是 我想知道是否有一种方法可以对程序发送的数据进行编码并通过网络发送 然后对其进行解码并将其提供给接收程序 我当前的代码如下 但我正在尝试找到一种比
  • 比较时间戳与日期变量(MySQL 和 PHP)

    非常感谢任何帮助 假设我有一个 MySQL 数据库 其中时间戳列的值为 1305590400 我如何将其与 PHP 变量 2011 05 17 进行比较 我想完全忽略时间部分 只比较日期 目前我正在尝试让它与以下内容一起工作 但它没有返回结
  • Win32 CRITICAL_SECTION 包含什么?

    Win32 CRITICAL SECTION 包含哪些数据 它有多大 这是没有记录的 大概是特定于实现的 但我很想知道 这是我安装的 Windows Vista SDK 的结果 WinNT h typedef struct RTL CRIT
  • 将 wsHttpBinding 转换为 customBinding

    如何将以下 wsHttpBinding 转换为 customBinding 我需要这样做 这样我就可以增加时钟偏差 这是针对http的
  • 如何获取Windows负载值[重复]

    这个问题在这里已经有答案了 我想使用 Java 从 Windows 获取有关 CPU RAM HDD 网络和进程 服务 列表的数据 如何在不使用第三方库或 JNI 的情况下获取这些系统值 Windows 中是否有类似于 proc 的东西 我
  • 如何绘制具有径向渐变的扇形(iphone)

    如何在 Objective c Core Graphics 中绘制具有径向渐变的扇形 实心圆弧 我用 CGContextDrawRadialGradient 但它画了圆圈 如果你告诉我如何通过径向渐变填充任何形状 那就太好了 谢谢 添加定义
  • 防止 WooCommerce 优惠券堆叠在购物车和结帐页面上

    我需要防止两个特定的优惠券一起使用 我成功地实现了这段代码 它可以防止将这些优惠券堆叠在cart page add action woocommerce before cart check coupon stack function che
  • 使用 json 序列化的 void 函数 swift 4 中出现意外的非 void 返回值

    我目前正在尝试通过编写可以多次使用的通用函数来清理项目上的代码 但是我需要我的函数返回一个数组 我的错误是 void 函数中出现意外的非 void 返回值 这是我的代码 func JSONSerialisation JsonUrl Stri
  • Mysql 空间索引未使用

    我正在寻找能够找到从点到点给出的近似匹配的行 假设在 20 米内 它可以工作 但它不使用索引 我试图利用该表上的空间索引 但似乎没有使用它 解释命令给我 possible keys null 具有以下内容 mysql 5 7 17 tabl
  • 如何在两个地方获取锁,但在一个地方释放锁?

    我是 C 新手 我需要在两种方法中获取锁定 但在一种方法中释放 那行得通吗 public void obtainLock Monitor Enter lockObj public void obtainReleaseLock lock lo
  • 改进并行计算的内存布局

    我正在尝试使用 C AMP 优化用于并行计算的算法 Lattice Boltzmann 并寻找一些优化内存布局的建议 刚刚发现将一个参数从结构中删除到另一个向量 阻塞向量 中可以增加约 10 有人有任何可以进一步改善这一点的建议 或者我应该
  • Android:按下“后退”按钮时提示用户保存更改

    我有一个包含多个用户可编辑项目 EditText 字段 RatingBar 等 的活动 如果按下后退 主页按钮并且已进行尚未保存的更改 我想提示用户 读完android文档后 似乎这段代码应该放在onPause方法中 我尝试在 onPaus