Intereting Posts
Скрыть кнопку микрофона Виртуальная клавиатура Android Приложение Android не получает уведомление FCM при закрытии Как сохранить 2 строки в приложении Android? Android setUserVisibleHint никогда не вызывается? Osmdroid – более высокий уровень масштабирования? Как отправить простую электронную почту программно? (Существует простой способ сделать это?) Пользовательский переключатель – размер дорожки и селектора не работает ниже 21 API Что позволяет Android Eclipse LogCat? Android Media Player играет на заднем плане, но не останавливается, когда приложение убито Как эффективно реализовать шаблон MVVM для моего приложения для Android, который также облегчит написание тестовых примеров? Android Swipe View с вкладками без использования библиотеки поддержки V4 StartForeground () не показывает мое уведомление Переопределение всплывающего фона переполнения ActionBarCompat? Просмотр EditText только с номером клавиатуры CardView имеет дополнительный запас в каждом краю на Pre-Lollipop

DialogFragment с setRetainInstanceState (true) не отображается после поворота устройства

У меня есть вопрос относительно DialogFragment. Я пытаюсь сделать диалог, который сохраняет его состояние после поворота устройства. В этом диалоговом окне есть куча ссылок на такие вещи, как адаптеры и другие более тяжелые объекты, и мне нужно, чтобы это поддерживалось при вращении, если это возможно, без необходимости делать все ссылки Parcelable или Serializable, чтобы я мог использовать onSaveInstanceState для их сохранения и восстановления Первоначальная активность воссоздается.

Я заметил, что в DialogFragment есть метод, называемый setRetainInstance (boolean), который позволяет сохранить экземпляр фрагмента диалога при повторном создании активности. Однако, когда я поворачиваю устройство сейчас, диалог больше не отображается. Я знаю, что могу получить его из FragmentManager, но я не могу найти способ сделать его видимым снова. Любые предложения по этому поводу?

Спасибо, Михай

Solutions Collecting From Web of "DialogFragment с setRetainInstanceState (true) не отображается после поворота устройства"

Вам нужно сделать несколько вещей:

  1. Используйте метод фабрики экземпляра, чтобы инициировать экземпляр DialogFragment следующим образом:

    public static MyDialogFragment newInstance(MyModel model) { MyDialogFragment myDialogFragment = new MyDialogFragment(); Bundle bundle = new Bundle(); bundle.putSerializable("MODEL", model); myDialogFragment .setArguments(bundle); return myDialogFragment; } 
  2. Поместив setRetainInstance (true) в onCreate, все ваши ссылки, объявленные в фрагменте, будут сохранены после повторного создания первоначальной активности

     @Override public void onCreate(Bundle icicle) { this.setCancelable(true); setRetainInstance(true); super.onCreate(icicle); } 
  3. Избегая исчезновения при вращении, делая это

     @Override public void onDestroyView() { if (getDialog() != null && getRetainInstance()) getDialog().setDismissMessage(null); super.onDestroyView(); 

    }

  4. Получить свой объект, используя

     (MyModel) getArguments().getSerializable("MODEL") 

Диалоговый фрагмент должен сохраняться автоматически до тех пор, пока вы выполните следующее:

  1. Если вы вызываете Activity onSaveInstanceState (), убедитесь, что вы вызываете суперфункцию !!!! , В моем случае это был ключ. Также убедитесь, что вы делаете то же самое в Фрагменте.
  2. Если вы используете setRetainInstance , вам нужно вручную сохранить значения. В противном случае вы сможете не беспокоиться об этом, в большинстве случаев. Если вы делаете что-то более сложное, вам может потребоваться setRetainInstance(true) , но в противном случае игнорировать его.
  3. Некоторые люди жаловались на ошибку в библиотеке поддержки, где отправляется сообщение об увольнении, когда этого не должно быть. По-видимому, последняя библиотека поддержки исправила это, поэтому вам не стоит беспокоиться об этом.