OnBackPressed 不显示警报
OnBackPressed doesn't display alert
我尝试重写 onkeydown() 方法以及 onBackPressed() 方法,但没有出现警告对话框相反,它只是回到之前的 intent.I 尝试了几个示例,但其中 none 成功了。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
Log.d("confirm save method","");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("");
builder.setMessage("Do you want to Save the Game ?");
builder.setCancelable(false);
builder.setPositiveButton("YES",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
System.exit(0);
}
});
builder.setNegativeButton("NO",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
Log.d("confirm save method","");
}
- 提示 1:如果覆盖
onBackPressed
,则不必覆盖 onKeyDown(int keyCode, KeyEvent event)
。那很复杂。删除这个方法(onKeyDown
)可以解决这个问题。
技巧2:return true
中断此按键事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
alertAialog();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void alertDialog(){
...
}
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
.setTitle("Exit Alert")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//finishAffinity();
finish(); //or do anything
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
试试这个代码,同时删除你的 onKeyDown();
我尝试重写 onkeydown() 方法以及 onBackPressed() 方法,但没有出现警告对话框相反,它只是回到之前的 intent.I 尝试了几个示例,但其中 none 成功了。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
Log.d("confirm save method","");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("");
builder.setMessage("Do you want to Save the Game ?");
builder.setCancelable(false);
builder.setPositiveButton("YES",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
System.exit(0);
}
});
builder.setNegativeButton("NO",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
Log.d("confirm save method","");
}
- 提示 1:如果覆盖
onBackPressed
,则不必覆盖onKeyDown(int keyCode, KeyEvent event)
。那很复杂。删除这个方法(onKeyDown
)可以解决这个问题。 技巧2:
return true
中断此按键事件@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { alertAialog(); return true; } return super.onKeyDown(keyCode, event); } private void alertDialog(){ ... }
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
.setTitle("Exit Alert")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//finishAffinity();
finish(); //or do anything
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
试试这个代码,同时删除你的 onKeyDown();