プログラマってこんなかんじ??

アプリ作ったり歌ったりしてます

画面回転してもFragment再生成しないでレイアウト変更したい+取得したデータ使い回したい

お題

  • 画面回転させて、縦/横で別のレイアウトを表示する
    • 縦画面のときは ListView を表示
    • 横画面のときは GridView を表示(1行2列)
  • ただし、一度取得したデータは使いまわしたい


縦画面
f:id:dai4649:20120704014336p:plain

横画面
f:id:dai4649:20120704014417p:plain


実装のポイント

  • Activity
    • コンフィグ変更のたびに毎回 再生成
  • Fragment
    • Fragment#setRetainInstance(true) を設定し、Activity 再生成時に Fragment は再生成されないようにする(Fragment#onCreate/onDestroy を抑止)
    • Activity 再生成のたびに走る Fragment#onCreateView でレイアウト再読込させる
  • データ取得
    • 一度だけ(今回の例では一度だけ呼び出される Fragment#onCreate 内で)
  • レイアウト
    • res/layout, res/layout-land に 縦/横用レイアウトxml を格納しておく
    • レイアウトxml 内に 同一id で ListView/GridView を定義しておく


メイン部分のコード。(コード全体はこちら)