我创建了一个测试项目,其中包含两个不同的片段,可以在同一个活动中显示。一个片段用于横屏,另一个片段用于竖屏。
# 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;
}
}
我有两个main.xml文件,一个在layout/目录下,另一个在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。
同样的事情也会发生在另一个方向上,如果设备以竖屏方向启动,然后我将其旋转到横屏模式:PortraitFragment只会被重新加载,而不是加载LandscapeFragment。
我做错了什么?