Если бы мой DialogFragment
был объявлен как внутренний класс, я получил InstantiationException
на orientation change
, то есть, когда экземпляр воссоздан, в котором говорится, что нет открытого конструктора, класс isn ' t public и т.д. На самом деле все public
, конструктор по умолчанию установлен. Если я просто переместил этот DialogFragment
в отдельный файл - все будет хорошо. Я не ищу обходного пути, я просто хочу понять, почему это происходит.
Почему DialogFragment не может быть внутренним классом?
Ответ 1
Это похоже на ограничение в Java на основе того, как Fragments
создаются и воссоздаются.
Кажется, что все Fragment
должны быть переустановлены в определенных ситуациях [1] например, изменения ориентации (и я бы догадаться об инициализации, в зависимости от того, как создается Fragment
). Это означает, что он будет восстановлен извне вашего внешнего класса. Однако внутренний класс не static
не может быть создан извне внешнего класса. [2] Там также являются другими случаями, в которых a Fragment
необходимо было бы связать с вне класса. [3]