У меня есть приложение Activity
в моем приложении для Android, которое устанавливает различные XML-схемы разметки в зависимости от ориентации. Я объявил android:configChanges="orientation"
в манифесте. Теперь вызывается - но к этому времени новая ориентация уже вступила в силу.Сохранение состояния _before_ изменение ориентации при андроиде: configChanges = "ориентация" указана
Моя цель - попытаться подключиться к жизненному циклу и попытаться сэкономить некоторые изменения до действует новая ориентация; так что я могу восстановить состояние, когда вернусь к текущей ориентации.
Я взломал его следующим образом, но я не уверен, что это правильный способ сделать это. Моя процедура включает сохранение состояния в , а затем вызов setContentView()
для установки макета для новой ориентации.
public class SwitchOrientationActivity extends Activity {
private View mLandscape, mPortrait;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater li = LayoutInflater.from(this);
mLandscape = li.inflate(R.layout.landscape, null);
mPortrait = li.inflate(R.layout.portrait, null);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (Configuration.ORIENTATION_LANDSCAPE == newConfig.orientation) {
switchToLandscape();
} else {
switchToPortrait();
}
}
private void switchToPortrait() {
/*
* Use mLandscape.findViewById() to get to the views and save the values
* I'm interested in.
*/
saveLanscapeState();
setContentView(mPortrait);
}
private void switchToLandscape() {
/*
* Use mPortrait.findViewById() to get to the views and save the values
* I'm interested in.
*/
savePortraitState();
setContentView(mLandscape);
}
}
Есть ли более элегантный способ достичь этого?
Поскольку изменение ориентации приводит к уничтожению и воссозданию активности, вы всегда можете сохранить в методах onPause, onStop или onDestroy? –
@Nick Campion: если вы объявляете андроид: configChanges = "ориентация" в файле манифеста, активность больше не уничтожается/не создается при изменении ориентации –
А, я кое-что узнал. –