В официальном примере http://developer.android.com/reference/android/app/DialogFragment.html#BasicDialog фрагмент создается с использованием статического фабричного метода, который оборачивает аргументы в Bundle и вызывает конструктор без аргументов, передавая аргументы с помощью setArguments(bundle) - поэтому мой вопрос - почему бы и нет просто сделать публичный конструктор с этими аргументами? В чем причина использования методов фрагмента getArguments/setArguments - возможно, Dialog не гарантируется воссоздание каждый раз, но повторное использование? если да, то когда это происходит? Заранее спасибо.
DailogFragment — getArguments/setArguments — зачем передавать аргументы пакетом?
Ответы (1)
Применение шаблона конструктора по умолчанию без аргументов позволяет системе динамически воссоздавать фрагмент при необходимости. Из документов:
Все подклассы Fragment должны включать общедоступный пустой конструктор. Платформа часто повторно создает экземпляр класса фрагмента, когда это необходимо, в частности, во время восстановления состояния, и должна иметь возможность найти этот конструктор для его создания. Если пустой конструктор недоступен, во время восстановления состояния в некоторых случаях возникнет исключение времени выполнения.
«будет часто» и «в некоторых случаях» оставляет его расплывчатым. Но если не удовлетворять ваше любопытство... аргументы это!
person
Joel Skrepnek
schedule
25.04.2012
Пустой общедоступный конструктор может сосуществовать с параметризованным общедоступным конструктором. Это не объясняет использование статического метода (вместо конструктора) или перенос аргументов в объект
Bundle
.
- person Konrad Morawski; 17.03.2014
@KonradMorawski Вы правы, это звучит разумно. Однако инструмент ADT lint выделяет такой конструктор как неисправный.
- person Tomasz Gawel; 12.09.2014