2012-06-05 82 views
7

我想完成我的主菜單在我的應用程序。我認爲在OnBackPressed方法中添加一個AlertDialog是一個簡單的好方法。但由於某種原因,我收到各種錯誤。Android提示AlertDialog onBackPressed

我在OnBackPressed中創建了AlertDialog並顯示它,但是當我按下後退按鈕時,該應用剛剛關閉,並且出現錯誤提示窗口正在泄漏。

任何想法如何解決這個問題?我搜索了大約30分鐘,找不到任何其他人有這個問題。

+0

顯示'onBackPressed()'的代碼...雖然我不確定你想要做什麼是一個好主意。 – Squonk

+1

按下後退按鈕時顯示的AlertDialogs(即「確認退出」對話框)***嚴重減慢用戶體驗。我之前完成了這個工作,對於我的應用程序在後續版本中刪除它們時出現的速度有多快感到非常驚訝。不要使用它們,除非你真的,*真的*,***真的需要:)。 –

+0

@AlexLockwood你會說,我真的,真的,**真**需要顯示一個警告對話框,否則用戶所做的更改會因簡單的回退而丟失? – winklerrr

回答

2

我在OnBackPressed中創建了AlertDialog並顯示它,但是當我按下後退按鈕時,該應用剛剛關閉,並且出現錯誤提示窗口正在泄漏。

如果你裏面你OnBackPressed呼籲super.OnBackPressed()則應用程序將結束,因爲這是什麼OnBackPressed基實現呢。不要撥打super方法,並且應用程序不會關閉。

30

儘量不要打電話super.OnBackPressed(),這個代碼建議立即進行刪除幫助:

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        MyActivity.this.finish(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 

} 
3

如果你想調用super.onBackPressed()使用此代碼:

@Override 
public void onBackPressed() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        //finish(); 
        MyActivity.this.onSuperBackPressed(); 
        //super.onBackPressed(); 
       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    /* 
    if (handleCancel()){ 
     super.onBackPressed(); 
    } 
    */ 
} 

public void onSuperBackPressed(){ 
    super.onBackPressed(); 
} 

我只是添加了一個新的公共方法onSuperBackPressedsuper-方法MyActivity。

感謝去K_Anas爲提供優秀的想法。