2

我正在开发一个有两个片段的 Android 活动。Activity 有两种可能的布局,一种在 Portait,另一种在 Landscape。

我创建的片段运行良好,但是当我更改手机/平板电脑的方向时遇到了麻烦。

其中一个 Fragment 是ListFragment,带有一个 AsyncTask 来从 Web 加载列表数据。有了这个片段,我就没有问题了,因为我可以再次创建它。(虽然加载需要一段时间)。

另一个Fragment内部有一个 Google Map V2 片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <fragment
        android:id="@+id/mapInicio"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment" />

</LinearLayout>

onCreate我从以下方法创建片段FragmentActivity

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_inicio);



    Fragment listFragment = new ListaEstaciones();
    FragmentTransaction transList = getSupportFragmentManager()
            .beginTransaction();
    transList.add(R.id.listaestaciones_f_container, listFragment);
    transList.commit();



    Fragment mapFragment = new MapaGoogleV2();
    FragmentTransaction transMap = getSupportFragmentManager()
            .beginTransaction();
    transMap.add(R.id.mapa_f_container, mapFragment);
    transMap.commit();



}

onConfigurationChanged方法中,我有这个代码。如在 中onCreate,我创建了片段,并更改了视图,因为现在我们处于横向/纵向:

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);


    setContentView(R.layout.activity_inicio);

    Fragment listFragment = new ListaEstaciones();
    FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction();
    transaction.add(R.id.listaestaciones_f_container, listFragment);
    transaction.commit();



    Fragment mapFragment = new MapaGoogleV2();
    FragmentTransaction transMap = getSupportFragmentManager()
            .beginTransaction();
    transMap.add(R.id.mapa_f_container, mapFragment);
    transMap.commit();

}

当我在此方法中创建 ListFragment 时效果很好,但不适用于 MapFragment。带有 MaponCreateView的 Fragment 方法中的应用程序崩溃。我想我不能再膨胀这个片段了:

04-16 18:20:32.795: E/AndroidRuntime(15543): android.view.InflateException: Binary XML file line #6: Error inflating class fragment

我的问题:

有没有办法在更改布局时避免重新创建片段?

我怎样才能做到这一点?

谢谢!

4

2 回答 2

2
于 2013-04-18T20:06:07.407 回答
0

如果您所需要的只是纵向和横向的不同布局,那么有一种更简单的方法可以做到这一点。创建一个文件夹 layout-land 并将布局 XML 放在那里,用于您想要在横向中指定不同布局的任何片段/活动。Android 将根据方向处理要使用的布局。查看developer.android.com 上的此页面以获取更多信息。

这是我的意思的另一个例子。

于 2013-04-16T16:48:02.390 回答