按返回键时弹出对话框出现两次

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



}
2个回答

15

你的对话框出现两次是因为它捕获了后退键的两个事件,即按键按下和松开..将其限制在其中任何一个上..

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

      /* Now call onBackPressed method here */
 }

1

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

你所做的是手动从 onKeyDown 调用此方法,然后通过 super.onKeyDown(keyCode, event) 进一步委托事件调用 onBackPressed()(这会注册你按下了返回键并自动调用 onBackPressed());

如果你想要处理返回键按下事件,那么要么完全删除 onKeyDown 方法并仅使用 onBackPressed(),要么将你的 onBackPressed() 重命名为某个独特的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接