我有一个简单的应用程序进行测试。它有一个Android Studio默认带来的“基本活动”。还有一个GoogleMap片段显示在基本活动中(代码在帖子的末尾)。
大家都知道,基本Activity有一个像这样的浮动按钮:
主要的问题是,我是一个全新的使用片段的人,我不太明白它们是如何工作的(我正在研究它),但我想做的是:通过点击浮动按钮,Map被“重新启动”,再次重新加载并清除用户已经放置的标记。
正确的方法是什么?
我发现了几个建议,但我无法让它们工作,或者我无法看到如何正确地实现它们。我尝试的方法之一是分离和附加map片段,但这导致它崩溃并没有显示任何结果。代码如下,我将其添加到浮动按钮侦听器中:
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)
}
}
}
Map碎片
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)
}
}
2条答案
按热度按时间xriantvc1#
您可以使用在片段中定义的自定义接口,然后在按下按钮时从Activity调用(此处的示例如何创建接口:Communicating between a fragment and an activity - best practices)。当您按下按钮并调用接口时,您可以使用片段内的
mapFragment?.getMapAsync(callback)
刷新Map。n6lpvg4x2#