我有一个包含几个用户可编辑项(EditText字段,RatingBar等)的活动。我想提示用户是否按下了后退/主页按钮,并且所做的更改尚未保存。阅读完android文档后,似乎这段代码应该放在onPause方法中。我尝试将AlertDialog放在onPause中,但是显示对话框然后立即将其删除,因为没有任何内容可以阻止暂停完成。
到目前为止,这是我想出的:
@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()并监听返回键,然后覆盖默认行为:
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()您可以改用:
onBackPressed()
@Override public void onBackPressed() { // do something on back. return; }
这个答案本质上是从这篇博客文章中删除的。如果您需要 长 按, 兼容性 支持,对 虚拟硬 键的支持或诸如此类的 原始 解决方案,请阅读它 onPreIme()。
onPreIme()