2011-05-10 202 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

相關問題