5

在代码中,当我按下后退按钮时,对话框会显示两次。谁能告诉我如何只获得一次对话?

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



}
4

2 回答 2

15

您的对话框将出现两次,因为它消耗了来自后键的两个事件,即按下键和按下键.. 将其限制为其中任何一个..

             if (event.getAction() != KeyEvent.ACTION_DOWN)
 {

      /* Now call onBackPressed method here */
 }
于 2011-05-10T07:52:19.377 回答
1

onBackPressed()是一个标准的 Activity 方法

您正在做的是手动从 onKeyDown 调用此方法,然后通过 super.onKeyDown(keyCode, event) 进一步委托事件再次调用它(它注册,您按下并自动调用 onBackPressed() );

如果您想使用按键后按事件,则可以完全删除 onKeyDown 方法并仅使用 onBackPressed(),或者将您的 onBackPressed() 重命名为独特的。

于 2011-05-10T07:57:35.557 回答