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); // 再生を抑止
}
}