我有一个应用程序,当用户按下BACK按钮时,它显示对话框,对话框无法取消所以我设置它setCancelable(false)
但我想在用户再次按下BACK按钮时关闭对话框。 ( 如果用户按下后退按钮,显示对话框。 如果用户再次按下“返回按钮”,则关闭对话框 )
我的代码
private boolean dialogshown = false;
private AlertDialog d;
public boolean onKeyDown(int keycode, KeyEvent e) {
if(keycode == KeyEvent.KEYCODE_BACK)
if(!dialogshown) {
d = new AlertDialog.Builder(MainActivity.this).create();
d.setButton(AlertDialog.BUTTON_POSITIVE, "Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
dialogshown = false;
}
});
d.setButton(AlertDialog.BUTTON_NEGATIVE, "Exit",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
System.exit(0);
}
});
d.setCancelable(false);
d.show();
dialogshown = true;
} else {
try{ d.dismiss(); }catch (Exception exc){Toast.makeText(this,"Error back",Toast.LENGTH_LONG).show();}
}
return super.onKeyDown(keycode, e);
}
问题是,当我按“返回”按钮时,它会显示一个对话框,但当我再次按下它时,什么都不会发生
答案 0 :(得分:0)
试试这段代码:
AlertDialog alertDialog;
public void onBackPressed() {
if(alertDialog == null || !alertDialog.isShowing()){
alertDialog = = new AlertDialog.Builder(context)
.setTitle("Delete entry")
.setMessage("Are you sure you want to delete this entry?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}else{
alertDialog.cancel();
}
}
无需维护任何额外的变量来执行此操作。
希望它会对你有所帮助:)。
答案 1 :(得分:-1)
为对话框打开或不打开布尔值。
isDialogOpen = false
并覆盖背压。当用户按下此方法时会调用。
@Override
public void onBackPressed() {
if(isDialogOpen==false){
d.show();
isDialogOpen == true;
}
else {
isDialogOpen == false;
d.dismiss();
finish();
}
}
我希望这能解决你的问题。
编辑:感谢akyirem samuel