Подобный вопрос уже возникал несколько раз, но я обнаружил странную закономерность, которой, я думаю, быть не должно.
В макете есть Activity
с EditText
. Когда пользователь нажимает на это поле, появляется программный ввод. С добавлением флага android:windowSoftInputMode="stateUnchanged"
к AndroidManifest
все работает как положено при изменении ориентации устройства - клавиатура сохраняет свое состояние. Но когда есть Fragment
поверх этого Activity
, а EditText
находится в Fragment
, это не работает. Я предполагаю, что флаг на AndroidManifest
в этом случае пропускается (флаг охватывает только Activity
), а при смене ориентации клавиатура исчезает.
Я не нашел чистого решения для сохранения состояния клавиатуры при изменении ориентации. Я видел решение с ручным отображением клавиатуры на onActivityCreated()
, но мне это не нравится, так как требуется удерживать состояние видимости клавиатуры для некоторой переменной в объекте, которая переживает изменения ориентации. Я обнаружил, что если в Activity
есть EditText
, даже когда пользователь не прикасается к нему и он не сфокусирован, клавиатура сохраняет свое состояние, что совершенно неожиданно.
Я не могу удалить Fragment
и полагаться только на Activity
, потому что Fragments
используются в ViewPager
. Но я проверил, что это происходит и тогда, когда Fragment
напрямую присоединен к Activity
.
Я также обнаружил, что все приложения, которые я проверил, так или иначе решили эту проблему.
Есть ли чистое решение для сохранения состояния клавиатуры при изменении ориентации с помощью фрагментов?
Изменить: мне также не нравится вариант android:configChanges="orientation|screenSize"
.