2011-05-10 124 views
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(); 
    } 



} 

回答

14

你的对话框来两次,因为它消耗从返回键,即按下按键和按键两个事件了..限制,以其中任何一个..

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

     /* Now call onBackPressed method here */ 
} 
+2

谢谢Deepak.This方法也工作正常。 – akhil2003in 2011-05-10 09:33:32

1

onBackPressed()是非标准活动方法

你在做什么,是从onKeyDown手动调用这个方法,然后通过super.onKeyDown(keyCode,event)进一步通过delegateing事件再次调用它(注册,你按下并自动调用onBackPressed() );

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

+0

谢谢亚历克斯,我删除了onKeyDown method.now其工作正常。 – akhil2003in 2011-05-10 09:25:43

相关问题