android - 无法更改 fragment SupportMapFragment 的容器 ID

标签 android android-fragments supportmapfragment

我开发了一个带有 Google map 和抽屉导航的应用程序。当我启动应用程序时,会显示 map ,用户可以打开抽屉导航。

当用户点击抽屉导航中的第一项时, map 应该会显示出来,以防他之前切换到另一个 fragment 。但是,当我调用 map fragment 时,我的应用程序崩溃并出现以下错误代码:java.lang.IllegalStateException: Can't change container ID of fragment SupportMapFragment{36a7826b #0 id=0x7f0e007a}: was 2131624058 now 2131624057

我在 onItemClick 中的抽屉导航中显示 map 的操作是:

getSupportFragmentManager().beginTransaction()
    .add(R.id.fragment_container, supportMapFragment)
    .addToBackStack(null)
    .commit();

它适用于其他 fragment 但不适用于 map fragment 。 map fragment 在 xml 中硬编码以从头显示它并在 onCreate 方法中实例化如下:supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

我的所有其他 fragment 都是通过调用 new MyFragment(); 实例化的,它们扩展 Fragment

非常感谢任何关于如何修复崩溃和显示 map 的建议和提示。

最佳答案

与其添加和删除 map ,不如隐藏和显示它。

首先是因为性能和用户界面问题:当您将 map 添加到 Activity 时 - 在屏幕上实际呈现 map 需要一些时间。

你可以通过

SupportMapFragment supportMapFragment; // field

supportMapFragment = (SupportMapFragment)getSupportFragmentManager()
   .findFragmentById(R.id.map);

// To show map fragment instead of your content fragment
getSupportFragmentManager().beginTransaction()
   .show(supportMapFragment)
   .remove(yourContentFragment)
   .commit();

// And to hide it
getSupportFragmentManager().beginTransaction()
   .hide(supportMapFragment)
   .add(yourContentFragment)
   .commit();

如果您确实需要添加和删除 map ,您应该以编程方式进行,而不是在 xml 中静态声明 MapFragment。

关于android - 无法更改 fragment SupportMapFragment 的容器 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33875970/

相关文章:

android - 使用静态 fragment 中的按钮打开新 Activity ?

android - 为 Android 构建 openssl 的问题

java - Android实现多语言支持

android - 屏幕旋转 fragment

android - fragment 中的 onCreateOptionsMenu() 不替换 ActionBar 菜单

android - 在 logcat 上看不到 StrictMode 详细信息 - 在屏幕旋转时抑制了 StrictMode 策略违规

android - 谷歌地图问题并获得子 fragment 管理器

Android - SupportMapFragment with GoogleMaps API 2.0 给出 IllegalArgumentException

java - 如何让人类标记在 map 上移动?

安卓模拟器卡在黑屏