Всем привет!
Разбираюсь с разработкой по Android, возник следующий вопрос.
Как известно, при повороте устройства активность пересоздается. В документации сказано, что состояние всех View сохраняется в дефолтной реализации метода onSaveInstanceState в том случае, если View имеет уникальный id.
Написал простейшее приложение - EditText, Button и TextView. Вводишь текст в EditText, нажимаешь на Button, текст переносится в TextView. Все виджеты имеют id. Так вот, наблюдаю следующее поведение: текст в EditText действительно сохраняется. Но текст в TextView сохраняется только при ПЕРВОМ повороте устройства. При втором повороте текст теряется.
Почему так?
Сохранение текста в TextView при повороте устройства
Re: Сохранение текста в TextView при повороте устройства
Можно написать в манифесте android:configChanges="keyboardHidden|orientation|srceenSize" и больше не беспокоиться по этому поводу. При повороте ничего теряться не будет.
Re: Сохранение текста в TextView при повороте устройства
Спасибо, но судя по документации, это всего лишь предотвратит пересоздание активности. И еще там сказано, что пользоваться этим не рекомендуется:
А суть вопроса как раз в том, почему в той же документации сказано, что состояние визуальных компонентов сохраняется автоматически при пересоздании активности, а оно как раз таки не сохраняется, точнее, не всегда. И самое главное - почему при ВТОРОМ повороте пропадает текст? И почему он сохраняется при первом?Note: Using this attribute should be avoided and used only as a last resort.
Re: Сохранение текста в TextView при повороте устройства
Скорее всего так: TextView предназначен для хранения статического текста, который обычно не изменяется. А потому, для экономии памяти, не сохраняется. Если сохранять все, то памяти для сохранения может понадобиться больше, чем занимает сама активитити (при простом коде, но сложном xml). Но при повороте в первый раз определяется, что текст в TextView изменился, и его нужно сохранить. Между первым и вторым поворотом текст не изменяется, а потому не сохраняется и теряется (попробуй измени для проверки). Но я, чтобы не заморачиваться с этим, добавляю строку в манифест.