5

Im offiziellen Beispiel http://developer.android.com/reference/android/app/DialogFragment.html#BasicDialog wird das Fragment mit der Verwendung der statischen Factory-Methode erstellt, die Argumente in einem Bundle umschließt und No-Args-Konstruktor Argumente mit SetArguments (Bundle) übergeben - also meine Frage ist - warum nicht einfach öffentlichen Konstruktor mit machen diese Argumente? Was ist der Grund für die Verwendung der Methoden des getArguments/setArguments-Fragments? Ist es nicht garantiert, dass Dialog jedes Mal neu erstellt wird, aber wiederverwendet wird? Wenn ja, wenn es passiert? Vielen Dank im Voraus.DailogFragment - getArguments/setArguments - Warum Argumente in einem Bündel übergeben?

Antwort

7

Durch das Erzwingen eines Nicht-Arguments ermöglicht das Standardkonstruktormuster dem System, das Fragment bei Bedarf dynamisch neu zu erstellen. Aus der Dokumentation:

Alle Unterklassen von Fragment müssen einen öffentlichen leeren Konstruktor enthalten. Das Framework instanziiert häufig eine Fragmentklasse bei Bedarf erneut, insbesondere während der Statuswiederherstellung, und muss in der Lage sein, diesen Konstruktor zu finden, um es zu instanziieren. Wenn der leere Konstruktor nicht verfügbar ist, tritt in einigen Fällen während der Statuswiederherstellung eine Laufzeitausnahme auf.

"wird oft" und "in einigen Fällen" lässt es vage. Aber kurz vor der Befriedigung Ihrer Neugierde ... Argumente ist es!

+1

Ein leerer öffentlicher Konstruktor könnte mit einem parametrisierten öffentlichen Konstruktor koexistieren. Dies erklärt nicht die Verwendung einer statischen Methode (anstelle eines Konstruktors) oder das Umbrechen von Argumenten in einem "Bündel" -Objekt. –

+0

@KonradMorawski Sie haben Recht, das klingt vernünftig. Das Tool ADT lint hebt jedoch einen solchen Konstruktor als fehlerhaft hervor. –

Verwandte Themen