我开发了一个带有 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/