Android アプリにはActivity
、向きに応じてビューとして異なるレイアウト XML を設定する があります。私はandroid:configChanges="orientation"
マニフェストで宣言しました。NowonConfigurationChanged()
が呼び出されますが、このときまでに、新しい向きはすでに有効になっています。
私の目標は、ライフサイクルに接続して、新しい向きが有効になる前にいくつかの変更を保存することです。現在の向きに戻ったときに状態を復元できるようにします。
次のようにハッキングしましたが、これが正しい方法かどうかはわかりません。私の手順では、状態を保存して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);
}
}
これを達成するためのよりエレガントな方法はありますか?