Есть несколько способов сделать это:
Сохранить состояние активности
Вы можете сохранить состояние активности в onSaveInstanceState
.
@Override
public void onSaveInstanceState(Bundle outState) {
/*Save your data to be restored here
Example : outState.putLong("time_state", time); , time is a long variable*/
super.onSaveInstanceState(outState);
}
, а затем используйте bundle
для восстановления состояния.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState!= null){
/*When rotation occurs
Example : time = savedInstanceState.getLong("time_state", 0); */
} else {
//When onCreate is called for the first time
}
}
Ручка изменения ориентации самостоятельно
Другая альтернатива - справиться с изменениями ориентации самостоятельно. Но это не считается хорошей практикой.
Добавьте это в свой файл манифеста.
android:configChanges="keyboardHidden|orientation"
для Android 3.2 и более поздних версий:
android:configChanges="keyboardHidden|orientation|screenSize"
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
//Handle rotation from landscape to portarit mode here
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
//Handle rotation from portrait to landscape mode here
}
}
Ограничить вращение
Вы также можете ограничить свою деятельность портретным или ландшафтным режимом, чтобы избежать поворота.
Добавьте это в тег активности в файле манифеста:
android:screenOrientation="portrait"
Или реализовать это программно в своей деятельности:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}