无法更改片段 SupportMapFragment 的容器 ID
Can't change container ID of fragment SupportMapFragment
我开发了一个带有 Google 地图和导航抽屉的应用程序。当我启动应用程序时,会显示地图,用户可以打开导航抽屉。
当用户点击导航抽屉中的第一项时,地图应该会出现,以防他之前切换到另一个片段。但是,当我调用地图片段时,我的应用程序崩溃并显示以下错误代码: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();
它适用于其他片段但不适用于地图片段。地图片段在 xml 中硬编码以从头显示它并在 onCreate 方法中实例化如下:supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
我的所有其他片段都是通过调用 new MyFragment();
实例化的,它们扩展到 Fragment
。
非常感谢任何关于如何修复崩溃和显示地图的建议和提示。
与其增删地图,不如隐藏和显示。
首先是因为性能和用户界面问题:当您将地图添加到 activity - 在屏幕上实际渲染地图需要一些时间。
您可以通过
实现
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。
我开发了一个带有 Google 地图和导航抽屉的应用程序。当我启动应用程序时,会显示地图,用户可以打开导航抽屉。
当用户点击导航抽屉中的第一项时,地图应该会出现,以防他之前切换到另一个片段。但是,当我调用地图片段时,我的应用程序崩溃并显示以下错误代码: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();
它适用于其他片段但不适用于地图片段。地图片段在 xml 中硬编码以从头显示它并在 onCreate 方法中实例化如下:supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
我的所有其他片段都是通过调用 new MyFragment();
实例化的,它们扩展到 Fragment
。
非常感谢任何关于如何修复崩溃和显示地图的建议和提示。
与其增删地图,不如隐藏和显示。
首先是因为性能和用户界面问题:当您将地图添加到 activity - 在屏幕上实际渲染地图需要一些时间。
您可以通过
实现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。