Используйте DateFormat... Текущий стандарт до желанной отсрочки Joda.
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
}
Эти методы могут быть переопределены для любого действия, они просто позволяют сохранять и восстанавливать значения каждый раз, когда действие создается / уничтожается, когда ориентация экрана изменяется, действие уничтожается и воссоздается в фон, поэтому вы можете использовать эти методы для временного сохранения / восстановления состояний во время изменения.
Вам следует глубже изучить два следующих метода и посмотреть, подходит ли он вашему решению.
http: // developer .android.com / reference / android / app / Activity.html
Один из компромиссов - избежать вращения. Добавьте это, чтобы исправить действие только для книжной ориентации.
android:screenOrientation="portrait"
Вы можете попробовать использовать onSaveInstanceState ()
и onRestoreInstanceState ()
в своей деятельности для вызова saveState (...)
и restoreState (...)
в вашем экземпляре WebView.
Я пробовал использовать наRetainNonConfigurationInstance (возвращая WebView), а затем получить его обратно с помощью getLastNonConfigurationInstance во время onCreate и переустановить.
Похоже, пока не работает. Не могу не думать, что я действительно близок! Пока что я просто получаю пустой/белый фон WebView вместо этого. Пост здесь в надежде, что кто-нибудь сможет помочь протолкнуть этот за финишную черту.
Может, мне не стоит проходить WebView. Возможно, объект изнутри WebView?
Другой метод, который я пробовал - не мой любимый - это установить это в деятельности:
android:configChanges="keyboardHidden|orientation"
... и затем ничего не делать здесь:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// We do nothing here. We're only handling this to keep orientation
// or keyboard hiding from causing the WebView activity to restart.
}
Это работает, но это может не считаться лучшей практикой.
Тем временем, у меня также есть один ImageView, который я хочу автоматически обновлять в зависимости от вращения. Оказалось, что это очень просто. В моей папке res
у меня есть drawable-land
и drawable-port
для хранения вариаций пейзажа/портрета, затем я использую R.drawable.myimagename
для источника ImageView и Android "делает правильные вещи" - ура!
... за исключением того, что когда вы смотрите на изменения в конфигурации, то это не так. :(
Так что я нахожусь в разногласиях. Используйте наRetainNonConfigurationInstance и вращение ImageView работает, но WebView стойкость не ... или используйте наConfigurationChanged и WebView остается стабильным, но ImageView не обновляется. Что делать?
Последнее замечание: В моем случае, принудительная ориентация не является приемлемым компромиссом. Мы действительно хотим изящно поддержать вращение. Похоже на то, что делает приложение Android Browser! ;)
Если вы не хотите, чтобы WebView перезагружался при изменении ориентации, просто переопределите onConfigurationChanged в классе Activity:
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
И установите атрибут android:configChanges в манифесте:
<activity android:name="..."
android:label="@string/appName"
android:configChanges="orientation|screenSize"
подробнее смотрите:
http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
https://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges
Изменить: этот метод больше не работает так, как указано в docs
Исходный ответ:
Это можно решить, перезаписав onSaveInstanceState (Bundle outState)
в своей деятельности и вызвав saveState
из веб-просмотра:
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
}
Затем восстановите это в своем onCreate после того, как веб-просмотр был повторно завышен, конечно:
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blah);
if (savedInstanceState != null)
((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState);
}