小编典典

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

java

我有一个包含几个用户可编辑项(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();
}

我是在正确的轨道上吗,还是有另一种方式可以完成我在这里试图做的事情?任何帮助将是巨大的!


阅读 217

收藏
2020-09-08

共1个答案

小编典典

您的步调不正确;您应该做的是覆盖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;
}

这个答案本质上是从这篇博客文章中删除。如果您需要 按, 兼容性 支持,对 虚拟硬 键的支持或诸如此类的 原始 解决方案,请阅读它
onPreIme()

2020-09-08