0

Ich bin sehr neu in der Android-Entwicklung. Ich habe viele Android Tutorials und Artikel durchgelesen, aber ich bin immer noch ein wenig verwirrt über meine Situation im Moment.Wie interagieren Sie mit 2 Dialog Fragment Lifecycle auf Android?

Was ich tun muss: Ich habe zwei Dialogfragment, f1 und f2. Es gibt ein Audio, das im Hintergrund spielt. Wenn ein Dialogfeld angezeigt wird, hören Sie auf, Audio abzuspielen. Wenn der Dialog geschlossen wird, wird das Audio fortgesetzt.

Was ich getan habe: Ich habe eine Listener-Schnittstelle mit 2 Methoden implementiert: onCreateDialog und onDismissDialog. Es funktioniert nur für einen Dialog (f1 oder f2 erscheint, und Audio stoppt. Dialog schließt ab, Audio nimmt wieder auf)

Was ist nicht richtig: Eine Situation, die: f1 erscheint, drücken Sie "ja", f1 wird entlassen, f2 wird auftauchen. Die Audiowiedergabe wird beendet (eigentlich ist sie bereits beendet, weil f1 aufgetaucht ist), dann wird die Audiowiedergabe fortgesetzt. Also habe ich überprüft Log, es scheint, dass f2 onCreateDialog vor f1 onDismissDialog aufgerufen wurde, deshalb Audio wieder aufgenommen, wenn f2 aufgetaucht.

Hat jemand eine Idee, was ich in dieser Situation tun könnte? JEDE Hilfe wird geschätzt !!

Vielen Dank !!!

+0

Also wollen Sie das Audio wieder alle zusammen stoppen? Ich bin bezüglich der Frage verwirrt. – Ashton

+0

Ich möchte, dass der Ton stoppt, solange ein Dialog erscheint. F2 wird nach dem Loslassen von F1 angezeigt. @Ashton – Zip

Antwort

1
ArrayList <DialogFragment> dialogs = new ArrayList(); 

void resumeSound() { 
    for (DialogFragment dialog: dialogs){ 
     //maybe isVisible won't work, try with isAdded() or add a custom  
     //flag like [boolean isVisible] inside the Dialog 
     if (dialog.isVisible() { 
      return; 
     } 
    } 
    .... 
    //Code to resume sound; 
    .... 
} 
//Put following on each dialog fragment 
onCreateDialog() { 
    //Make sure dialog is added with a TAG or id, so you can find it later 
    dialogs.add(this); 
} 

onDismissDialog() { 
    //you'll have to put following line inside an array iterator, 
    //check if TAG or id equals, and then remove 
    //(maybe also implement equals() for DialogFragment 
    dialogs.remove(); 
    resumeSound(); 
} 
+0

Nun, das ist ein guter Punkt. Aber ich bin mir nicht sicher, ob ich später mehr als 2 Dialoge haben werde, nur nicht sicher über die Anzahl der Dialoge. – Zip

+0

Überprüfen Sie meine bearbeitete Antwort –