2009-12-18 48 views
7

在我的活動,我想簡單的展示信息的對話框,這樣的東西:顯示簡單的消息對話框

new AlertDialog.Builder(context).setMessage(message).show(); 

如果我這樣做,對話框會在我那旋轉手機(更不用提它泄漏也會消失,所以用戶可能會錯過它)。我可以使用託管對話框,但我不確定如何合理地使用它來處理這些類型的短消息?看起來你必須這樣做:

showDialog(SOME_DLG_ID); 
... 
@Override 
onCreateDialog(int id) { 
    if (id == SOME_DLG_ID) { 
     new AlertDialog.Builder(context).setMessage(message).show(); 
    } 
} 

沒有辦法傳遞的信息應該是到onCreateDialog什麼,因爲它的覆蓋方法。我討厭做一個只存儲當前消息應該存在的父活動的成員變量。你們怎麼做到的?

感謝

+0

我相信你堅持使用成員變量選項...對不起。 – rui

+0

是啊,看起來這樣,真可惜!謝謝 – Mark

+0

是!這對開發人員來說是一種恥辱。我們需要編寫這樣一個奇怪的模式來顯示對話框。 –

回答

3

您可以實現Activity.onPrepareDialog(int, Dialog)在屏幕上顯示的對話框之前切換出的消息。所以,你可以這樣做:

@Override protected void onPrepareDialog(int id, Dialog dialog) { 
    if (id == SOME_DLG_ID) { 
     ((AlertDialog) dialog).setMessage(message); 
    } 
} 

你仍然必須保持跟蹤消息你在你當前活動的表現,但至少這種方式,你不創造每一個Dialog對象你想要顯示的消息。

+1

嗯,這裏的問題是一樣的,你不能傳遞你在調用showDialog()到onPrepareDialog或onCreateDialog()的字符串消息... – rui

+0

啊,我的壞...我想我誤解了這個問題。 –

+0

是的,這是真正的主要問題,你需要這個奇怪的模式來獲得動態消息字符串到對話框 - 它感覺真的很尷尬!謝謝 – Mark

4

如果我這樣做,對話框會泄漏 當我轉動那個電話(不 提到它會消失一樣,所以 用戶可能錯過它)

您可以添加

<activity 
    android:configChanges="orientation|keyboardHidden" 
> 

添加到您的AndroidManifest.xml中,以防止在手機旋轉時重新啓動活動。我在我的應用程序中使用它,並且我的AlertDialog在電話的旋轉中存活。

+0

是的,android:configChanges =「orientation」是要走的路。它阻止了「onCreate」的執行,並讓應用程序在旋轉手機時保持相同的狀態 – datayeah

0

使用DialogFragment管理對話框可確保正確處理生命週期事件,例如用戶旋轉屏幕或按下「後退」按鈕時。