gpt4 book ai didi

android - 使用 Fragments 更改 Android 布局

转载 作者:行者123 更新时间:2023-11-29 00:30:36 26 4
gpt4 key购买 nike

我正在开发一个包含两个 fragment 的 Android Activity 。 Activity 有两种可能的布局,一种是纵向布局,另一种是横向布局。

我创建的 fragment 运行良好,但在更改手机/平板电脑的方向时遇到问题。

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

另一个 fragment 里面有一个Google Map V2 fragment :

<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>

我从 FragmentActivityonCreate 方法创建 fragment :

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 中一样,我创建了 fragment ,并且更改了 View ,因为现在我们处于横向/纵向:

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 MaponCreateView 方法中崩溃。我想我不能再次膨胀这个 fragment :

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

我的问题:

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

我该怎么做?

谢谢!

最佳答案

如果不使用onConfigurationChanged 方法,就无法避免Activity 被销毁,但这种解决方案有时很难处理。

在网上搜索后,我发现了一个 very interesting article谈论如何手动处理 fragment 的重新创建,但此解决方案不适用于我的 map fragment 。

我最终的解决方案是让 Android 自动更改布局,从 list 中删除 android:configChanges=”orientation”

此外,我无法使用包含 Google Map V2 的 map fragment 。我直接使用了 Google Map V2 fragment 。

要保留Fragment的实例,只需要将指令setRetainInstance(true):

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

setContentView(R.layout.activity_inicio);

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

感谢您的帮助。

关于android - 使用 Fragments 更改 Android 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com