我有一个包含多个用户可编辑项目(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(使用前将#替换为@)