2011-06-09 89 views
3

由於回退鍵銷燬我的應用程序,所有數據都將丟失我需要攔截它以詢問用戶是否真的是他想要的。Android:攔截回密鑰

我以爲以下結構:

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {  
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
     { 
     // ask user if he really wants to exit 
     // no --> return true; 
     // yes --> return super.onKeyDown(keyCode, event); 
     //manually entering either of the return values works fine 
     } 
    return super.onKeyDown(keyCode, event); 
    } 

的「詢問用戶」的一塊,我想用一個警告對話框來實現。我的問題是,現在顯示的是警告對話框,但onKeyDown方法在顯示警告對話框時運行到最後,並且在警告對話框中,我不知道如何告訴系統傳遞正確的返回值。

完整的代碼,我腦子裏想的是

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {  
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
     { 

      alertDialog = new AlertDialog.Builder(this).create(); 
      alertDialog.setTitle("Tile"); 
      alertDialog.setMessage("data lost, are you sure?"); 

      alertDialog.setButton(-1, getString(R.string.yes), new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialog, int which) 
       { 
        return; 
        //I only can return without a boolean value here.     } 
      }); 

      alertDialog.setButton(-2, getString(R.string.no), new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialog, int which) 
       { 
        return; 
       } 
      }); 

      alertDialog.show(); 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

感謝,A

+0

刪除回報super.onKeyDown(的keyCode,事件); – motoku 2011-06-09 07:58:18

回答

3

當用戶按下後,出現對話框。

onKeyDown現在已經處理,所以你返回true。

現在你的對話框顯示,

當您按下是你想模仿後退按鈕是什麼finish();確實

當您按下沒有你只是關閉對話框,並在活動繼續

你會想這樣的:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{  
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
    { 

     alertDialog = new AlertDialog.Builder(this).create(); 
     alertDialog.setTitle("Tile"); 
     alertDialog.setMessage("data lost, are you sure?"); 

     alertDialog.setButton(-1, getString(R.string.yes), new DialogInterface.OnClickListener() 
     { 
      @Override 
      public void onClick(DialogInterface dialog, int which) 
      { 
       finish(); // or yourContext.finish(); 
       //I only can return without a boolean value here.     
      } 
     }); 

     alertDialog.setButton(-2, getString(R.string.no), new DialogInterface.OnClickListener() 
     { 
      @Override 
      public void onClick(DialogInterface dialog, int which) 
      { 
       // do nothing dialog will dismiss 
      } 
     }); 

     alertDialog.show(); 
     return true; //meaning you've dealt with the keyevent 
    } 
    return super.onKeyDown(keyCode, event); 
} 
0

alertDialog.show();應該在沒有按鈕的情況下調用