2015-07-01 7 views
8

Angenommen, ich habe mehrere Dialogfragmente, die als Antwort auf Nachrichten und Ereignisse angezeigt werden, die in beliebiger Reihenfolge eintreffen können. Normalerweise wird der zuletzt angezeigte Dialog oben angezeigt. Gibt es eine Möglichkeit, einen Dialog Fragment unter einem bestehenden zu zeigen oder ihre Z-Reihenfolge ändern, nachdem sie gezeigt werden?Wie erhebe ich ein DialogFragment über einem anderen?

Es soll für mein app ziemlich selten sein, um zu einem Zeitpunkt mehr als einen Dialog zu zeigen, aber es könnte passieren. Es gibt einen bestimmten Dialog, der immer sichtbar sein sollte, wenn er sichtbar ist.

+0

Jeder Sorgfalt die downvotes zu erklären? –

+0

Diese Downvotes ergeben überhaupt keinen Sinn. + 1'ed zum Ausgleich. Außerdem untersuche ich diese Frage, es ist definitiv eine interessante Frage. – Sebastiano

+0

Warum sollten mehrere Dialoge angezeigt werden? Ich würde einen anderen Ansatz empfehlen, da das Klicken auf "Ablehnen" auf einer Reihe von Dialogen eine ziemlich schreckliche Erfahrung wäre. Berücksichtigen Sie einen anderen Ansatz, z. B. einen Dialogmanager, der die Anzeigepriorität von Dialogen bei ihrer Anzeige beibehält. – Cookster

Antwort

4

Ein Dialog erstellt ein Anwendungsunterfenster. Android-Window-Manager (WindowManagerService) berechnet automatisch Fenster z-Reihenfolge je nach Typ und speichern sie in WindowState ‚s mLayer Feld. Interne Android-Klassen haben Zugriff auf dieses Feld und ändern manchmal die z-Reihenfolge des Fensters, aber diese API wird nicht mit Android SDK bereitgestellt. Es scheint also, dass die einzige Möglichkeit, die Z-Reihenfolge des Dialogs zu beeinflussen, darin besteht, sie neu zu erstellen.

Alles, was ich oben geschrieben habe, ist nur ein Ergebnis einer kurzen Untersuchung des Quellcodes Android so kann ich mich irren. Und vielleicht gibt es eine hacky Art zu tun, was Sie wollen mit Reflexion und Zugriff auf private Felder und Methoden. Aber ich bin mir nicht sicher, ob es eine gute Idee ist, es zu versuchen. Meiner Meinung nach wäre es besser, nur einen einzigen Dialog oder gar eine Aktivität zu haben und Fragmente darin zu verwalten.

+0

Kann es über Reflection modifiziert werden? – Sebastiano

+1

@dextor, der Fenstermanager arbeitet im Android-Laufzeitprozess und kann daher nicht über Reflektion aufgerufen werden. – Michael