Сохранение текста в TextView при повороте устройства

Интерфейс, диалоги, темы, стили, меню
Ответить
yuri_dp
Сообщения: 2
Зарегистрирован: 14 мар 2016, 01:07

Сохранение текста в TextView при повороте устройства

Сообщение yuri_dp » 14 мар 2016, 01:15

Всем привет!
Разбираюсь с разработкой по Android, возник следующий вопрос.
Как известно, при повороте устройства активность пересоздается. В документации сказано, что состояние всех View сохраняется в дефолтной реализации метода onSaveInstanceState в том случае, если View имеет уникальный id.
Написал простейшее приложение - EditText, Button и TextView. Вводишь текст в EditText, нажимаешь на Button, текст переносится в TextView. Все виджеты имеют id. Так вот, наблюдаю следующее поведение: текст в EditText действительно сохраняется. Но текст в TextView сохраняется только при ПЕРВОМ повороте устройства. При втором повороте текст теряется.
Почему так?

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Сохранение текста в TextView при повороте устройства

Сообщение math64 » 14 мар 2016, 08:55

Можно написать в манифесте android:configChanges="keyboardHidden|orientation|srceenSize" и больше не беспокоиться по этому поводу. При повороте ничего теряться не будет.

yuri_dp
Сообщения: 2
Зарегистрирован: 14 мар 2016, 01:07

Re: Сохранение текста в TextView при повороте устройства

Сообщение yuri_dp » 15 мар 2016, 01:19

Спасибо, но судя по документации, это всего лишь предотвратит пересоздание активности. И еще там сказано, что пользоваться этим не рекомендуется:
Note: Using this attribute should be avoided and used only as a last resort.
А суть вопроса как раз в том, почему в той же документации сказано, что состояние визуальных компонентов сохраняется автоматически при пересоздании активности, а оно как раз таки не сохраняется, точнее, не всегда. И самое главное - почему при ВТОРОМ повороте пропадает текст? И почему он сохраняется при первом?

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Сохранение текста в TextView при повороте устройства

Сообщение math64 » 15 мар 2016, 08:00

Скорее всего так: TextView предназначен для хранения статического текста, который обычно не изменяется. А потому, для экономии памяти, не сохраняется. Если сохранять все, то памяти для сохранения может понадобиться больше, чем занимает сама активитити (при простом коде, но сложном xml). Но при повороте в первый раз определяется, что текст в TextView изменился, и его нужно сохранить. Между первым и вторым поворотом текст не изменяется, а потому не сохраняется и теряется (попробуй измени для проверки). Но я, чтобы не заморачиваться с этим, добавляю строку в манифест.

Ответить