Ответы:
Если вы хотите заставить TextView
сохранить свое состояние, вы должны добавить freezesText
атрибут:
<TextView
...
android:freezesText="true" />
Из документации по freezesText
:
Если установлено, текстовое представление будет включать свой текущий полный текст внутри своей замороженной сосульки в дополнение к метаданным, таким как текущая позиция курсора. По умолчанию это отключено; это может быть полезно, когда содержимое текстового представления не хранится в постоянном месте, таком как поставщик содержимого
Чтобы сохранить данные об изменении ориентации, вам необходимо реализовать два метода:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Read values from the "savedInstanceState"-object and put them in your textview
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// Save the values you need from your textview into "outState"-object
super.onSaveInstanceState(outState);
}
1) Не все представления с идентификатором сохраняют свое состояние. Виджеты Android с идентификатором, состояние которого может быть изменено пользователем, по-видимому, сохраняют свое состояние при мягком уничтожении. Итак, EditText сохраняет свое состояние, но TextView не сохраняет свое состояние при мягком уничтожении.
"AFAIK, Android заботится о сохранении состояния только для вещей, которые, как ожидается, изменится. Вот почему он сохраняет текст в EditText (который пользователь может изменить) и, возможно, не сохраняет состояние для TextView (которое обычно остается статическим ) "
Марк М
Таким образом, вы можете сохранить состояние текстового представления в onSaveInstanceState, и вы можете выбрать восстановление состояния текстового представления в onCreate.
2) Лучше всего сохранять «внутреннее» состояние экземпляра без просмотра, даже если вы объявляете
android:configChanges= "orientation|keyboardHidden"
Из документов:
«Однако ваше приложение всегда должно иметь возможность завершать работу и перезапускаться с сохранением предыдущего состояния. Не только потому, что есть другие изменения конфигурации, которые вы не можете предотвратить от перезапуска вашего приложения, но и для обработки таких событий, как получение пользователем входящего телефонный звонок, а затем вернется к вашему приложению ".
JAL
Android не делает за вас такие вещи. Вы сохранили все данные вручную.
Вы можете использовать в действии для сохранения значений
@Override
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> savedValues = new HashMap<String, Object>();
savedValues.put("someKey", someData);
return savedValues;
}
и используйте что-то подобное в методе oncreate действия для загрузки сохраненных объектов
HashMap < String, Object> savedValues
= (HashMap<String, Object>)this.getLastNonConfigurationInstance();
вы также можете выбрать отключение изменения ориентации для занятия
<activity android:name=".Activity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
Измените свои действия в AndroidManifest.xml, чтобы переопределить поведение изменения ориентации, добавив это в свое действие / действия:
android:configChanges="orientation|keyboardHidden"
Это должно выглядеть примерно так:
<activity android:name=".activity.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
</activity>
Добавьте их в AndroidManifest.xml.
Поместите название вашей деятельности вместо Activity_Name.
<activity android:name="Activity_Name"
android:screenOrientation="sensor"
...
android:configChanges="orientation|keyboardHidden|screenSize">
Это также будет работать с изменением значения TextField.
просто добавь
android:configChanges="orientation|screenSize"
к вашей деятельности в AndroidManifest.xml.
При изменении конфигурации Android по умолчанию перезапускает вашу активность. Чтобы изменить это, вы должны переопределить onConfigurationChanged()
метод. Кроме того, вы должны добавить android:configChanges
в свой файл манифеста.
Вы можете прочитать здесь .
Я также использовал
android:configChanges="orientation"
и это не сработало.
Но потом я нашел решение.
Убедитесь, что у вас правильно написана следующая строка:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
убедитесь, что он не читает что-то вроде
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
У меня на первом месте был второй способ, но когда я исправил, состояние сохранилось.