Почему DialogFragment не может быть внутренним классом?

Если бы мой DialogFragment был объявлен как внутренний класс, я получил InstantiationException на orientation change, то есть, когда экземпляр воссоздан, в котором говорится, что нет открытого конструктора, класс isn ' t public и т.д. На самом деле все public, конструктор по умолчанию установлен. Если я просто переместил этот DialogFragment в отдельный файл - все будет хорошо. Я не ищу обходного пути, я просто хочу понять, почему это происходит.

Ответ 1

Это похоже на ограничение в Java на основе того, как Fragments создаются и воссоздаются.

Кажется, что все Fragment должны быть переустановлены в определенных ситуациях [1] например, изменения ориентации (и я бы догадаться об инициализации, в зависимости от того, как создается Fragment). Это означает, что он будет восстановлен извне вашего внешнего класса. Однако внутренний класс не static не может быть создан извне внешнего класса. [2] Там также являются другими случаями, в которых a Fragment необходимо было бы связать с вне класса. [3]