Android Can';t更改片段SupportMapFragment的容器ID

Android Can';t更改片段SupportMapFragment的容器ID,android,android-fragments,supportmapfragment,Android,Android Fragments,Supportmapfragment,我开发了一个带有谷歌地图和导航抽屉的应用程序。当我启动应用程序时,地图会显示出来,用户可以打开导航抽屉 当用户单击导航抽屉中的第一个项目时,地图应该显示出来,以防他之前切换到另一个片段。但是,当我调用map fragment时,我的应用程序正在崩溃,错误代码如下:java.lang.IllegalStateException:无法更改fragment SupportMapFragment的容器ID{36a7826b#0 ID=0x7f0e007a}:was 2131624058现在2131624

我开发了一个带有谷歌地图和导航抽屉的应用程序。当我启动应用程序时,地图会显示出来,用户可以打开导航抽屉

当用户单击导航抽屉中的第一个项目时,地图应该显示出来,以防他之前切换到另一个片段。但是,当我调用map fragment时,我的应用程序正在崩溃,错误代码如下:
java.lang.IllegalStateException:无法更改fragment SupportMapFragment的容器ID{36a7826b#0 ID=0x7f0e007a}:was 2131624058现在2131624057

我在导航抽屉中单击以显示地图的操作是:

getSupportFragmentManager().beginTransaction()
    .add(R.id.fragment_container, supportMapFragment)
    .addToBackStack(null)
    .commit();
它适用于其他片段,但不适用于map片段。映射片段是用xml硬编码的,从一开始就显示出来,并在onCreate方法中实例化,如下所示:
supportMapFragment=(supportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)

我的所有其他片段都是通过调用
newmyfragment()实例化的和它们扩展
片段


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

与其添加和删除地图,不如隐藏和显示地图

首先,这是因为性能和用户界面问题:当您将贴图添加到“活动”时,实际在屏幕上渲染贴图需要一些时间

你可以通过

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();

如果您真的需要添加和删除映射,那么您应该以编程方式进行,而不是静态地用xml声明MapFragment。

Awesome!这立刻解决了问题。我只是显示设置片段,然后隐藏地图片段。如果我想显示地图,我只需显示地图片段并隐藏设置片段。它工作得很好。谢谢!