Fragmentで画面向き変更を検知した処理

Fragment 構成のアプリで、画面の向きが変わった時に Fragment 側で処理をする場合は、
Activity の ライフサイクル Destroy が走ることを利用する。

以下、サンプルである。


Activity での記述

public class SampleActivity extends Activity{
      :
      :
   private static int changingConfiguration;
   @Override
   protected void onDestroy(){
      super.onDestroy();
      changingConfiguration = getChangingConfigurations();
   }
   public int getSizeChangingConfigurations(){
      return changingConfiguration;
   }

}

Fragment での記述

Fragment では、getActivity を実行して親Activity から、
 getChangingConfigurations() の結果を受け取る。
http://developer.android.com/reference/android/content/pm/ActivityInfo.html
のとおり、CONFIG_ORIENTATION CONFIG_SCREEN_SIZE 論理和に、論理積を計算した結果で
画面向きが変わったことによる処理を実行する。

public class MyContentFragment extends Fragment{
   private View mContentview = inflater.inflate(R.layout.content, null);
   
   @Override
   public void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setRetainInstance(true);   // 再生を抑止
   }
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
      setRetainInstance(true);   // 再生を抑止
      if (mContentview != null){
         mContentview = inflater.inflate(R.layout.layout_flagment_sub1_detail, null);
         // TODO
      }

      int changingConfiguration = ((SampleActivity)getActivity()).getSizeChangingConfigurations();
      if (((ActivityInfo.CONFIG_ORIENTATION | ActivityInfo.CONFIG_SCREEN_SIZE) & changingConfiguration) != 0){

         // 画面向きが変わった時の処理

      }
      return mContentview;
   }
   @Override
   public void onActivityCreated(Bundle savedInstanceState){
      super.onActivityCreated(savedInstanceState);
      setRetainInstance(true);   // 再生を抑止
   }
}