5

W oficjalnym przykładzie http://developer.android.com/reference/android/app/DialogFragment.html#BasicDialog fragment jest tworzony za pomocą statycznej metody fabularnej, która opakowuje argumenty w pakiecie i wywołuje konstruktor no-args przekazujący args z setArguments (bundle) - więc moje pytanie brzmi - dlaczego nie po prostu utworzyć publicznego konstruktora z te argumenty? Jaki jest powód używania metod fragmentów getArguments/setArguments - czy Dialog nie może być odtworzony za każdym razem, ale jest ponownie wykorzystywany? jeśli tak, to kiedy to się dzieje? Z góry dzięki.DailogFragment - getArguments/setArguments - dlaczego przekazywanie argumentów w pakiecie?

Odpowiedz

7

Wymuszenie braku argumentów, domyślny wzorzec konstrukcyjny pozwala systemowi na dynamiczne odtworzenie fragmentu w razie potrzeby. Z dokumentacji:

Wszystkie podklasy Fragmentu muszą zawierać publiczny pusty konstruktor. Struktura ta często ponownie tworzy instancję klasy fragmentów, gdy jest taka potrzeba, w szczególności podczas przywracania stanu, i musi być w stanie znaleźć ten konstruktor, aby go utworzyć. Jeśli pusty konstruktor nie jest dostępny, wyjątek środowiska wykonawczego wystąpi w niektórych przypadkach podczas przywracania stanu.

"często" i "w niektórych przypadkach" pozostawia to niejasne. Ale bez zaspokojenia swojej ciekawości ... argumenty są!

+1

Pusty publiczny konstruktor może współistnieć z sparametryzowanym publicznym konstruktorem. Nie wyjaśnia to użycia metody statycznej (zamiast konstruktora) ani zawijania argumentów w obiekcie 'Bundle'. –

+0

@KonradMorawski Masz rację, to brzmi rozsądnie. Jednak narzędzie ADT lint podświetla taki konstruktor jako wadliwy. –