同じアクティビティで表示される 2 つの異なるフラグメントを持つテストプロジェクトを作成しました。1 つのフラグメントは横長用で、もう 1 つは縦長用です。
# My unique activity
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
# First Fragment
public class LandscapeFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
v.setText("LANDSCAPE");
return v;
}
}
# Other Fragment
public class PortraitFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
v.setText("PORTRAIT");
return v;
}
}
そして、2 つの main.xml があり、1 つは layout/ に、もう 1 つは layout-land/ にあります。各 main.xml は、使用する正しい Fragment を指します。
<!-- layout-land/main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment"
android:name="br.luckcheese.test.LandscapeFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<!-- layout/main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment"
android:name="br.luckcheese.test.PortraitFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<!-- layout/fragment.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="30sp" />
アプリをランドスケープで開くと LandscapeFragment が表示され、ポートレートで開くと PortraitFragment が表示されます。ここまでは順調ですね。
しかし、横向きで開いてデバイスを縦向きに回転すると、LandscapeFragment がリロードされて表示されます。これは予測された動作ではありません。PortraitFragment がロードされているはずです。
デバイスが縦向きで開始し、次に横向きに回転すると、同じことが逆に起こります。LandscapeFragment が読み込まれる代わりに、PortraitFragment がリロードされるだけです。
私は何を間違っていますか?