You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:如何将Firebase经纬度传递至Google Maps显示标记

如何将RecyclerView项的经纬度传递到地图页面并显示标记

嘿,我看了你的代码,发现问题出在点击地图按钮时传递了整个经纬度列表,而不是当前点击项对应的单个经纬度值,所以地图才一直显示默认的(0,0)位置。下面是一步步的修改方案,帮你实现需求:

1. 修正SearchAdapter中的按钮点击逻辑

在onBindViewHolder方法里,给buttonMap设置点击事件时,要获取当前position对应的经纬度,而不是整个列表:

holder.buttonMap.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
        // 获取当前点击项的经纬度
        String currentLat = studentLatitudeList.get(position);
        String currentLng = studentLongitudeList.get(position);
        
        Intent mapIntent = new Intent(context, MapViewActivity.class);
        // 传递单个经纬度值,用清晰的键名区分
        mapIntent.putExtra("SELECTED_LAT", currentLat);
        mapIntent.putExtra("SELECTED_LNG", currentLng);
        context.startActivity(mapIntent);
    }
});

2. 在MapViewActivity中接收并展示标记

修改MapViewActivity,先从Intent中取出经纬度,转换成double类型,然后在地图上添加对应位置的标记,还可以让地图自动聚焦到该位置:

public class MapViewActivity extends Activity implements OnMapReadyCallback {
    private double targetLat;
    private double targetLng;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        
        // 从Intent中获取传递的经纬度
        Intent incomingIntent = getIntent();
        if (incomingIntent != null) {
            String latStr = incomingIntent.getStringExtra("SELECTED_LAT");
            String lngStr = incomingIntent.getStringExtra("SELECTED_LNG");
            
            // 转换为double,记得处理可能的格式异常
            try {
                targetLat = Double.parseDouble(latStr);
                targetLng = Double.parseDouble(lngStr);
            } catch (NumberFormatException e) {
                e.printStackTrace();
                Toast.makeText(this, "无效的位置数据", Toast.LENGTH_SHORT).show();
            }
        }

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        // 创建目标位置
        LatLng studentLocation = new LatLng(targetLat, targetLng);
        
        // 添加标记
        googleMap.addMarker(new MarkerOptions()
                .position(studentLocation)
                .title("学生位置"));
        
        // 移动地图到目标位置,设置合适的缩放级别(15是比较适中的街道级缩放)
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(studentLocation, 15));
    }
}

额外提示

  • 确保Firebase中存储的经纬度是有效的数字字符串,比如"3.1415"这种格式,避免出现非数字字符导致转换失败。
  • 别忘了在AndroidManifest.xml中配置Google Maps的API密钥,以及添加必要的权限(比如ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION,如果需要定位功能的话)。

内容的提问来源于stack exchange,提问作者JavaGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:58:27