【发布时间】:2013-04-16 16:41:40
【问题描述】:
我正在开发一个包含两个 Fragment 的 Android Activity。 Activity 有两种可能的布局,一种在 Portait,另一种在 Landscape。
我创建的片段运行良好,但是当我更改手机/平板电脑的方向时遇到问题。
其中一个 Fragment 是 ListFragment,带有一个 AsyncTask,用于从 Web 加载列表数据。有了这个片段,我就没有问题了,因为我可以再次创建它。 (虽然加载需要一些时间)。
另一个片段里面有一个谷歌地图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>
我从FragmentActivity 的onCreate 方法创建片段:
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。 Fragment with a Map 的onCreateView 方法中的应用程序崩溃。我想我不能再膨胀这个片段了:
04-16 18:20:32.795: E/AndroidRuntime(15543): android.view.InflateException: Binary XML file line #6: Error inflating class fragment
我的问题:
有没有办法在更改布局时避免重新创建片段?
我该怎么做?
谢谢!
【问题讨论】:
-
@PlasticSturgeon 不一样。我只有谷歌地图片段有问题,我的 ListFragment 没有。
-
@PlasticSturgeon 我的问题是要避免碎片重新创建,而不是如何创建地图碎片。
标签: android android-fragments google-maps-android-api-2 onconfigurationchanged