У меня есть Activity
в моем приложении для Android, которое устанавливает различные XML-разметки в качестве вида в зависимости от ориентации. Я объявил android:configChanges="orientation"
в манифесте. Теперь вызывается onConfigurationChanged()
, но к этому времени новая ориентация уже вступила в силу.
Моя цель - попытаться подключиться к жизненному циклу и попытаться сохранить некоторые изменения до того, как вступит в силу новая ориентация; чтобы я мог восстановить состояние, когда вернусь к текущей ориентации.
Я взломал это следующим образом, но я не уверен, что это правильный способ сделать это. Моя процедура включает в себя сохранение состояния в onConfigurationChanged()
, а затем вызов 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);
}
}
Есть ли более элегантный способ добиться этого?