2009-12-18 11 views
7

W mojej działalności, chciałbym pokazać proste dialogi informacyjne, rzeczy takie jak:Pokazuje proste dialogi wiadomość

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

jeśli ja, że ​​okno będzie przeciekać kiedy obraca się, że telefon (nie wspominać również zniknie, więc użytkownik może go nie zauważyć). Mogę używać zarządzanych okien dialogowych, ale nie jestem pewien, w jaki sposób rozsądnie z nich korzystasz w przypadku tego typu krótkich wiadomości? Wygląda na to trzeba to zrobić:

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

nie ma sposobu, aby przekazać to, co powinno być przesłanie do onCreateDialog od jego metody obejścia. Nie chciałbym tworzyć zmiennej składowej działania macierzystego, która przechowuje tylko to, co powinna być aktualna wiadomość. Jak to wszystko robicie?

Dzięki

+0

Wierzę, że utknąłeś z opcją zmiennej członka ... przepraszam. – rui

+0

tak wygląda tak, co za wstyd! Dzięki – Mark

+0

Yup! To wstyd dla programisty. Musimy kodować w taki dziwny sposób, żeby pokazać okno dialogowe. –

Odpowiedz

3

można zaimplementować Activity.onPrepareDialog(int, Dialog) aby przełączyć się wiadomość przed pokazano okno na ekranie. Więc można zrobić coś takiego:

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

że nadal trzeba śledzić wiadomości, że jesteś obecny seans w swojej działalności, ale przynajmniej ten sposób, że nie tworzysz Dialog dla każdego obiektu wiadomość, którą chcesz pokazać.

+1

Problem jest taki sam, nie można przekazać komunikatu tekstowego, który masz w punkcie, w którym wywołujesz showDialog(), do onPrepareDialog lub onCreateDialog() ... – rui

+0

Ach, mój zły ... Przypuszczam, że źle zrozumiałem pytanie . –

+0

Tak, a to jest główny problem, potrzebujesz tego dziwnego wzorca, aby uzyskać ciąg dynamicznych wiadomości w oknie dialogowym - to naprawdę niezręczne! Dzięki – Mark

4

jeśli to zrobię, że okno będzie przeciekać kiedy obraca się, że telefon (nie wspomnieć zniknie, tak więc użytkownik może go przegapić)

Możesz dodać

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

do urządzenia AndroidManifest.xml, aby zapobiec ponownemu uruchomieniu działania po obróceniu telefonu. Używam go w mojej aplikacji i moja AlertDialog przetrwa obrót telefonu.

+0

yep, android: configChanges = "droga" jest do zrobienia. uniemożliwia wykonanie "onCreate" i pozwala aplikacji pozostać w tym samym stanie podczas obracania telefonu – datayeah

0

Użycie DialogFragment do zarządzania oknem dialogowym zapewnia, że ​​poprawnie obsługuje zdarzenia cyklu życia, na przykład gdy użytkownik obraca ekran lub naciska przycisk Wstecz.