画面の向きが変わったときにメンバ変数の値もクリアされてしまう(Android)

画面の向きが変わったときにメンバ変数の値もクリアされてしまう

なぜかAndroidでは画面の向きを変えたときに、Activity.onCreate() が呼ばれる、つまりActivityが再作成されている。このとき、クラスのメンバ変数の値もクリアされてしまう。この問題は以下の3つの方法で回避できた。

1)画面の向きを固定にする

Activity.onCreate()で setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) を呼び出す。画面の向きを変える必要がないときは、これが一番簡単で、スムーズで、安定している。

2)Activityの終了時に値を保存して、新しいActivityの開始時に再設定する

SharedPreferences を使う。面倒だが、これが一番推薦されているように思える。

3)変数を static にする

正しいやり方なのかわからないが、これで回避できた。新しいActivityも同一プロセス内にあるということらしい。

画面の向きを変える

なお、2)と3)では、画面の向きにあわせてデザインを変えた方が使いやすいはず。

これも正しいやり方なのかわからないが、Displayの縦横比で方向を判断してレイアウトを切り替える方法がある。

Activity.onCreate()内でhorizontal と landscape レイアウトを使い分けるサンプル

        int orientation = getWindowManager().getDefaultDisplay().getOrientation();
        if(orientation == 0) {
            setContentView(R.layout.main);        
        }
        else {
            setContentView(R.layout.main_l);                
        }

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください