无法更改片段SupportMapFragment的容器ID

jfm*_*fmg 4 android android-fragments supportmapfragment

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

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

我在导航抽屉中onItemClick显示的地图是:

getSupportFragmentManager().beginTransaction()
    .add(R.id.fragment_container, supportMapFragment)
    .addToBackStack(null)
    .commit();
Run Code Online (Sandbox Code Playgroud)

它适用于其他片段,但不适用于地图片段.地图片段在xml中进行硬编码,从头开始显示,并在onCreate方法中实例化,如下所示:supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

我所有其他片段都通过调用实例化,new MyFragment();并且它们可以扩展Fragment.

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

pep*_*kin 8

不是添加和删除地图,最好隐藏和显示它.

在此之前,由于性能和用户界面问题:当您将地图添加到活动时 - 在屏幕上实际渲染地图需要一些时间.

你可以通过这个来实现

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();
Run Code Online (Sandbox Code Playgroud)

如果你真的需要添加和删除map,你应该以编程方式进行,而不是静态地在xml中声明MapFragment.