如何让onMapReady方法仅在点击按钮时触发执行?
实现方案
onMapReady是Google Maps SDK自带的生命周期回调,会在地图组件初始化完成后自动触发,无法直接修改它的触发逻辑。你只需要拆分原有逻辑,把需要点击触发的业务代码抽为独立方法即可,具体实现步骤如下:
- 第一步:修改原有
onMapReady方法,仅保留地图实例存储逻辑,不要执行业务代码
@Override public void onMapReady(GoogleMap googleMap) { // 仅存储初始化完成的地图实例 map = googleMap; }
- 第二步:将原有的标记添加、相机移动逻辑抽为独立方法,增加非空校验避免崩溃
private void loadMapContent() { // 校验地图是否完成初始化,避免空指针崩溃 if (map == null) { Toast.makeText(this, "地图正在加载中,请稍后点击", Toast.LENGTH_SHORT).show(); return; } LatLng Maharashtra = new LatLng(19.169257, 73.341601); map.addMarker(new MarkerOptions().position(Maharashtra).title("Maharashtra").snippet("Population: 210312321").infoWindowAnchor(0.8f, 0.8f).draggable(true).zIndex(1)); map.moveCamera(CameraUpdateFactory.newLatLng(Maharashtra)); }
- 第三步:给目标按钮绑定点击事件,点击时调用上面抽离的方法即可
// 请将R.id.btn_trigger替换为你实际的按钮id Button mapTriggerBtn = findViewById(R.id.btn_trigger); mapTriggerBtn.setOnClickListener(v -> loadMapContent());
补充:如果需要避免重复添加标记,可以在添加标记前调用
map.clear()清空原有标记,或者加布尔值判断是否已经执行过加载逻辑。
内容的提问来源于stack exchange,提问作者Hou Feng
相关产品推荐
相关产品推荐

