按下后退按钮时,对话框显示两次

时间:2011-05-10 07:28:42

标签: android alertdialog onkeydown

在代码中,当我按下后退按钮时,对话框会显示两次。有人可以告诉我如何只进行一次对话吗?

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();
    }



}

2 个答案:

答案 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()重命名为唯一的。