Исключение при изменении ориентации из двухпанельного режима в однопанельное. - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть демонстрационное приложение, которое поддерживает как смартфоны, так и планшеты.

Также поддерживается изменение ориентации.

На планшетах есть один режим панели и два режима панели.Двухпанельный режим работает только в ландшафтном режиме.Весь пользовательский интерфейс выставлен на фрагменты.

Интерфейс пользователя в двухпанельном режиме является обычным шаблоном мастер-детализации: список слева и подробный экран справа.

Все остальное относится к планшетам при работе в альбомном режиме.

Сценарий:

  1. Запуск приложения на планшете в ландшафтном режиме
  2. Выберите статью слева (на второй панели фрагмент по умолчанию будет заменен фрагментом с деталями статьи)
  3. Изменить ориентацию
  4. Появится исключение

Проблема, с которой я сталкиваюсь, - это когда происходит изменение ориентации, я получаю исключение.Сообщение об ошибке сообщает об отсутствии FrameLayout с деталями идентификатора - это относится к макету, который должен отображаться только для layout-sw600dp-land.Для портретного режима есть другая раскладка layout-sw600dp-port

Бизнес-логика точно проверяет текущий режим и в пределах FragmentManager операций R.id.details

public void show() {
    if (isTwoPaneMode()) {
        showMain();
        showDetailed();
    } else {
        showMain();
    }
}

не приноситна мысль, есть ли какая-нибудь скрытая транзакция на этом R.id.details, которая не существует для этого варианта использования?

1 Ответ

0 голосов
/ 13 декабря 2018

Проблема была в setRetainInstance (true) в подробном фрагменте (она была пропущена из-за рефакторинга).

После удаления все начинает работать хорошо.

...