在代码中,当我按下后退按钮时,对话框会显示两次。有人可以告诉我如何只进行一次对话吗?
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Do you want to save configuration?");
builder.setPositiveButton
("Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
//here saveConfiguration is boolean type
if (saveConfiguration())
{
dialog.dismiss();
finish();
}
else
{
dialog.dismiss();
}
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
dialog.dismiss();
finish();
}
});
builder.show();
}
}
答案 0 :(得分:15)
你的对话框出现了两次,因为它正在消耗两个来自后退键的事件,即按下键和键起来..将其限制为任何一个..
if (event.getAction() != KeyEvent.ACTION_DOWN)
{
/* Now call onBackPressed method here */
}
答案 1 :(得分:1)
onBackPressed()是一个标准的活动方法
你正在做什么,从onKeyDown手动调用这个方法,然后通过super.onKeyDown(keyCode,event)进一步调用它再次调用它(它注册,你按下并自动调用onBackPressed());
如果你想使用按键后退事件,它要么必须删除onKeyDown方法,只使用onBackPressed(),要么将onBackPressed()重命名为唯一的。