2016-04-03 13 views
1

In Android App, mit ein paar Aktivitäten mit mehreren Fragmenten. Diese Aktivitäten oder dieses Fragment können aktiv ausgeführt werden, auch wenn es sich nicht auf dem BackStack befindet und Benachrichtigungen von verschiedenen Diensten empfangen werden.wie man einen Singlet Dialog macht

Wenn ein Ereignis eintritt, muss ein Dialogfeld zur Kommunikation mit dem Benutzer angezeigt werden. Die Aktivität oder das Fragment oben auf dem Stapel verfügt möglicherweise nicht über den Handler für dieses Ereignis. Jede andere Aktivität oder jedes Fragment, das interessiert ist, sollte reagieren, um einen Dialog für den Benutzer zu öffnen.

Das Problem ist, die Listener in den Aktivitäten und Fragmente, um die Ereignisse unabhängig zu behandeln wissen nicht, ob bereits der gleiche Dialog angezeigt wurde.

Was ist der beste Weg zu sagen, ob der Handler den Dialog öffnen soll oder nicht? Da dieser Dialog für dasselbe Ereignis identisch ist, kann es hilfreich sein, wenn er als Singleton verwendet werden kann.

Jeder hat einen Vorschlag, wie man den Dialog für diese Art von Situation zu einem Singleton machen kann?

Antwort

1

Sie können Dialog Singletone nicht erstellen, da Dialoge mit der aktuellen Ansicht verknüpft sind. Und Ihre aktuelle Ansicht kann sich ändern - der Dialog kann aus verschiedenen Instanzen der Aktivitäten (einer oder mehreren) erstellt werden.

Sie können jedoch eine einfache Singletone-Klasse implementieren, um alle Dialogdaten zu speichern - speichern Sie die Daten in und rufen Sie sie in Dialog onCreateView ab.

So erhalten Sie Singleton-Instanz mit allen Daten, aber Dialoge können je nach aktueller Ansicht variieren.

Sie können auch einen schwachen Link zum angezeigten Dialog in dieser Singletone-Klasse speichern. Mit dieser Methode können Sie erkennen, ob Ihr Dialog gerade angezeigt wird oder nicht.

+0

Dank Atrem! Eine einzelne Dateninstanz ist kein Problem. Der Dialog, der dem Kontext einer Aktivität zugeordnet ist, ist. Wenn in diesem Fall mehrere Aktivitäten oder Fragmente das Ereignis zum Anzeigen des Dialogs erhalten, ist es schwierig festzustellen, ob der Dialog angezeigt wurde. Vielleicht könnte eine Aktivität mit singleTask oder singleInstance helfen, jeder Gedanke? – lannyf

+0

Ich schlage vor, Link zu dem Dialog in Einzelinstanz Klasse zu speichern. In diesem Fall erstellen Sie die Methode 'useShowDialog (Kontext Kontext)'. Diese Methode würde den aktuell angezeigten Dialog überprüfen oder nicht. Wenn ja, können Sie den Dialog anzeigen. In einem anderen Fall können Sie neue Daten an den Dialog übergeben. –

Verwandte Themen