DailogFragment — getArguments/setArguments — зачем передавать аргументы пакетом?

В официальном примере http://developer.android.com/reference/android/app/DialogFragment.html#BasicDialog фрагмент создается с использованием статического фабричного метода, который оборачивает аргументы в Bundle и вызывает конструктор без аргументов, передавая аргументы с помощью setArguments(bundle) - поэтому мой вопрос - почему бы и нет просто сделать публичный конструктор с этими аргументами? В чем причина использования методов фрагмента getArguments/setArguments - возможно, Dialog не гарантируется воссоздание каждый раз, но повторное использование? если да, то когда это происходит? Заранее спасибо.


person Tomasz Gawel    schedule 25.04.2012    source источник


Ответы (1)


Применение шаблона конструктора по умолчанию без аргументов позволяет системе динамически воссоздавать фрагмент при необходимости. Из документов:

Все подклассы Fragment должны включать общедоступный пустой конструктор. Платформа часто повторно создает экземпляр класса фрагмента, когда это необходимо, в частности, во время восстановления состояния, и должна иметь возможность найти этот конструктор для его создания. Если пустой конструктор недоступен, во время восстановления состояния в некоторых случаях возникнет исключение времени выполнения.

«будет часто» и «в некоторых случаях» оставляет его расплывчатым. Но если не удовлетворять ваше любопытство... аргументы это!

person Joel Skrepnek    schedule 25.04.2012
comment
Пустой общедоступный конструктор может сосуществовать с параметризованным общедоступным конструктором. Это не объясняет использование статического метода (вместо конструктора) или перенос аргументов в объект Bundle. - person Konrad Morawski; 17.03.2014
comment
@KonradMorawski Вы правы, это звучит разумно. Однако инструмент ADT lint выделяет такой конструктор как неисправный. - person Tomasz Gawel; 12.09.2014