2012-10-21 43 views
2

我想實現這個代碼Android - 如何在完成活動之前顯示AlertDialog?

if(someCondition){ 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("message") 
     .setPositiveButton("Yes", this) 
     .setNegativeButton("No", this); 
     builder.show(); 
    } 
    finish(); 

的問題是,該活動呼籲結束()顯示對話框之前高達所以它拋出以下異常

MyActivity has leaked window [email protected] that was originally added here 

如何處理這個問題?

+0

你爲什麼叫完嗎?這個活動的目的是什麼? – Ralgha

+0

解釋本Activity的整個目的很複雜,但調用finish()是必需的,我必須在調用finish()之前處理AlertDialog。無論如何,這是一個過渡活動,正在做一些過程,並應完成後終止。它不顯示佈局。 –

回答

3
if(someCondition){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("message") 
    .setPositiveButton("Yes", this) 
    .setNegativeButton("No", this); 
    builder.show(); 
} else { 
    finish(); 
} 

而在處理按鈕的按鈕點擊放完成。

+0

看起來不錯。我現在就試一試。 –

+0

它的工作,但山姆的解決方案更適合我的情況。非常感謝:) –

+0

山姆的代碼不解決someCondition == false的情況。我想我會接受你的答案。謝謝你的努力。 –

0

你得到以下錯誤:

MyActivity has leaked window [email protected] that was originally added here 

,因爲建築商有活動結束前被解僱。所以我想你將不得不重新設計你想要完成的活動。也許你希望在點擊「否」按鈕時完成它?

我希望這會有所幫助。

+0

按「是」正在做一些東西,按「否」正在做一些其他的東西。我需要完成()任何方式 –

+0

那麼讓這些東西被執行,一旦完成,然後完成活動。 –

3

當對話框關閉時,使用OnDismissListener調用finish()。這樣用戶可以響應對話框,並且活動仍然可以關閉。


if(someCondition) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("message"); 
     .setPositiveButton("Yes", this) 
     .setNegativeButton("No", this); 

    AlertDialog dialog = builder.create(); 
    dialog.setOnDismissListener(new OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 
      finish(); 
     } 
    }); 
    dialog.show(); 
} 
else { 
    finish(); 
} 
+0

你的意思是我應該在條件結束後刪除finish()並將它寫入dismiss監聽器中?如果是這樣,如果someCondition == false? –

+0

我從你的例子中假設,無論按下哪個Button,你都想調用finish,OnDismissListener將方便地處理這兩個按鈕。我發佈了一個例子,你可以輕鬆地在那裏添加一個條件。 – Sam

+0

完美。這正是我需要的。非常感謝:) –

0

我不知道真正的問題是,但是你所得到的錯誤是什麼,因爲你完成的活動,而一個對話框顯示。我經常做的是在我的活動的或onStop方法中撥打dialog.dismiss()

該代碼如何?:

某些地方在您的活動;

private AlertDialog dialog; 

中的onPause或方法的onStop,

@Override 
public void onPause() { 
    super.onPause(); 
    if(dialog != null){ 
     dialog.dismiss(); 
    } 
} 

構建對話框,

if(someCondition){ 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("message") 
     .setPositiveButton("Yes", new OnClickListener(){ 
      public void onClick(DialogInterface arg0, int arg1) { 
       //do stuff 
       //finish? 
      } 
     }); 
     .setNegativeButton("No", new OnClickListener(){ 
      public void onClick(DialogInterface arg0, int arg1) { 
       //do stuff 
       //finish? 
      } 
     }); 
     dialog = builder.show(); 
    } 
相關問題