我正在开发一个有两个片段的 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
我的问题:
有没有办法在更改布局时避免重新创建片段?
我怎样才能做到这一点?
谢谢!