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

chr*_*pec 34 java android

我有一个活动,其中包含几个用户可编辑的项目(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();
}
Run Code Online (Sandbox Code Playgroud)

我是在正确的轨道还是有另一种方式来完成我在这里要做的事情?任何帮助都会很棒!

Dan*_*Lew 95

你没有走上正确的轨道; 你应该做的是覆盖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);
}
Run Code Online (Sandbox Code Playgroud)

如果您只支持Android 2.0及更高版本,他们会添加一个onBackPressed()您可以使用的代码:

@Override
public void onBackPressed() {
    // do something on back.
    return;
}
Run Code Online (Sandbox Code Playgroud)

这个答案基本上是从这篇博文中扯掉.如果您需要按,兼容性支持,虚拟硬键支持或原始解决方案onPreIme()等,请阅读它 .


小智 11

你怎么看待这种方法..

private  void exit(){
    this.finish();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

        AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
        alertbox.setTitle("Message");
        alertbox.setMessage("Quit ??? ");

        alertbox.setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {
                        exit();
                    }
                });

        alertbox.setNeutralButton("No",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {
                    }
                });

        alertbox.show();

        return true;
    } else {
        return super.onKeyDown(keyCode, event);
    }

}
Run Code Online (Sandbox Code Playgroud)