将参数发送到 onMapReady Google 地图 API Android

Send arguments to onMapReady Google Maps API Android

我正在检索数据,如下所示。对于每个 'blocks' 数据,我需要在我设置的 Google 地图上添加一个标记。那么是否可以将 'lat'、'lng' 等发送到 onMapReady 方法?

//the List to store the retrieved data
static List<infoToStore> info = new ArrayList<>();

public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot advertiser : dataSnapshot.getChildren()) {
        final String catString = advertiser.child("cat").getValue(String.class);
        final String URLString = advertiser.child("downloadURL").getValue(String.class);
        final String keyString = advertiser.child("key").getValue(String.class);
        final String lat = advertiser.child("latitude").getValue(String.class);
        final String lng = advertiser.child("longitude").getValue(String.class);
        final String descString = advertiser.child("serviceDesc").getValue(String.class);
        final String nameString = advertiser.child("serviceName").getValue(String.class);
        //populating the List
        info.add(new infoToStore(catString, URLString, keyString, lat, lng, descString, nameString));
    }
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(-20.285889,57.584607) , 10.0f) );
    for (infoToStore details: info){
        marker = mMap.addMarker(new MarkerOptions()
                .position(new LatLng(getLat(), getLng())
                .title(getName())
                .snippet(getDesc())));
    }
}

class infoToStore

public class infoToStore {
String cat;
String url;
String key;
String lat;
String lng;
String desc;
String name;

public infoToStore(String cat, String url, String key, String lat, String lng, String desc, String name) {
    this.cat = cat;
    this.url = url;
    this.key = key;
    this.lat = lat;
    this.lng = lng;
    this.desc = desc;
    this.name = name;
}

public String getCat() {
    return this.cat;
}

public String getUrl() {
    return this.url;
}

public String getKey() {
    return this.key;
}

public String getLat() {
    return this.lat;
}

public String getLng() {
    return this.lng;
}

public String getDesc() {
    return this.desc;
}

public String getName() {
    return this.name;
}
}

在您的 class 上创建一个 List<LatLng> 并使用您在 onDataChange

上获得的坐标填充它

然后在 onMapReady 上迭代该列表并将每个点添加到地图

如果您需要的不仅仅是 LatLng,例如要显示名称,您应该创建一个 class,其中包含您要保存的所有属性,如下所示:

public class InfoToStore {
    private LatLng latLng;
    private String name;

    InfoToStore(LatLng latLng, String name){
        this.latLng = latLng;
        this.name = name;
    }

    public LatLng getLatLng(){
          return this.latLng;
    }

    public String getName(){
          return this.name;
    }
}

onDataChange 的 for 中,在初始化列表后执行以下操作:

listOfPoints.add(new InfoToStore(latLng, nameString))

然后使用 for(InfoToStore info: listOfPoints)onMapReady 中迭代,并使用 info 中的信息添加每个点