【发布时间】: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)
}
}
【问题讨论】:
标签: android google-maps android-fragments