如何从片段外部清除/重置地图?
Posted
技术标签:
【中文标题】如何从片段外部清除/重置地图?【英文标题】:How to clear/reset a map from outside the fragment? 【发布时间】:2021-03-31 05:15:59 【问题描述】:我有一个简单的测试应用程序。它具有 android Studio 默认带来的“基本活动”。还有一个谷歌地图片段显示在基本活动中(代码在帖子的末尾)。
众所周知,基本活动有一个像这样的浮动按钮:
主要问题是我对使用片段完全陌生,我不太了解它们是如何工作的(我正在研究它)但我想做的是:通过单击浮动按钮,地图被“重新启动”,再次重新加载并清除用户放置的标记。
这样做的正确方法是什么?
我找到了一些建议,但我无法让它们发挥作用,或者我看不到如何正确实施它们。我尝试过的一种方法是分离并附加地图片段,但这会导致它崩溃并且没有显示任何结果。代码如下,我在浮动按钮监听器中添加:
val frg : Fragment? = supportFragmentManager.findFragmentById(R.id.map);
val frgTransac = supportFragmentManager.beginTransaction();
if (frg != null)
frgTransac.detach(frg);
frgTransac.attach(frg);
frgTransac.commit();
另一种选择是使用“googleMap.clear”,但我不知道如何从浮动按钮侦听器访问该对象。
我希望你能帮助我,最重要的是,了解片段是如何工作的以及我做错了什么。
主要活动
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(findViewById(R.id.toolbar))
findViewById<FloatingActionButton>(R.id.fab).setOnClickListener view ->
// CLEAR MAP FROM HERE
override fun onCreateOptionsMenu(menu: Menu): Boolean
menuInflater.inflate(R.menu.menu_main, menu)
return true
override fun onOptionsItemSelected(item: MenuItem): Boolean
return when (item.itemId)
R.id.action_settings -> true
else -> super.onOptionsItemSelected(item)
地图片段
class FMaps : Fragment()
private val callback = OnMapReadyCallback googleMap ->
val sydney = LatLng(-34.0, 151.0)
googleMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View?
return inflater.inflate(R.layout.fragment_f_maps, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
super.onViewCreated(view, savedInstanceState)
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(callback)
【问题讨论】:
【参考方案1】:您可以使用片段中定义的自定义接口,然后在按下按钮时从活动中调用(示例如何在此处创建接口:Communicating between a fragment and an activity - best practices)。当您按下按钮并调用界面时,您可以在片段内使用mapFragment?.getMapAsync(callback)
刷新地图。
【讨论】:
我整天都在做测试,用你发给我的东西和我一直在寻找的其他东西,但我真的找不到解决方案。我不知道我是否不能将 Java 中的概念外推到 Kotlin(这是我正在训练的),但我无法正确实现它。我知道如何更容易地做到这一点,但我想找到解决这个问题的方法。以上是关于如何从片段外部清除/重置地图?的主要内容,如果未能解决你的问题,请参考以下文章
如何将活动 UI 的点击传递到地图片段以将地图更改为 MAP_TYPE_HYBRID
如何在用java创建的布局内创建地图片段(GoogleMap)?