Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将对象与Google Maps标记关联?_Android_Object_Location_Google Maps Markers_Google Maps Android Api 2 - Fatal编程技术网

Android 如何将对象与Google Maps标记关联?

Android 如何将对象与Google Maps标记关联?,android,object,location,google-maps-markers,google-maps-android-api-2,Android,Object,Location,Google Maps Markers,Google Maps Android Api 2,我正在构建一个Android GPS应用程序,根据用户当前位置显示最近的位置。我使用的是MapFragment,我将标记放在地图上,就像在异步任务中一样: protected void onPostExecute(Void result) { super.onPostExecute(result); for(int i = 0; i < list.size(); i++) { HashMap<String,String> locati

我正在构建一个Android GPS应用程序,根据用户当前位置显示最近的位置。我使用的是MapFragment,我将标记放在地图上,就像在异步任务中一样:

protected void onPostExecute(Void result) { 
    super.onPostExecute(result);

    for(int i = 0; i < list.size(); i++)
    {
        HashMap<String,String> location = new HashMap<String,String>();
        location = list.get(i);

        String type = location.get("type");
        int marker = getTypeDrawable(type);

        LatLng position = new LatLng(Float.parseFloat(location.get("lat")), Float.parseFloat(location.get("long")));
         map.addMarker(new MarkerOptions()
        .position(position)
        .title(location.get("name"))
        .snippet(location.get("distance") + location.get("type"))                                  
        .icon(BitmapDescriptorFactory.fromResource(marker)));
        System.out.println(list.get(i));
    }

    Toast.makeText(MainActivity.this, "Finished retrieving nearby locations",
            Toast.LENGTH_SHORT).show();         
}

您需要选择能够唯一标识标记和位置的内容。也许这就是您在标记上设置的标题(您的位置中会有一些对应的字符串)或Lat/Lng组合。当用户点击一个标记时,您将在您的方法中收到该标记,您从标记读取标题或lat/lng,并从您的位置查找相应的位置。例如,您可以遍历位置的HashMap并检查该位置是否与标记具有相同的lat/lng,然后您就拥有了与标记对应的位置


当然有更有效的方法,但你知道了

给定所需方法的格式,我认为您可以使用标记的哈希代码作为访问位置的键。我自己还没有试过,但我下面的想法应该行得通(而且更有效)。 首先,您必须更改添加标记的方式,以:

Marker locationMarker = map.addMarker(new MarkerOptions()
    .position(position)
    .title(location.get("name"))
    .snippet(location.get("distance") + location.get("type"))                                  
    .icon(BitmapDescriptorFactory.fromResource(marker)));
这确保您可以访问添加的标记对象。然后,使用
整数作为键的
HashMap
,以及
位置作为结果对象。使用标记的hashcode键存储位置,您可以使用:
marker.hashcode()访问该位置

我通常使用
getTag()
/
setTag()
方法来保存对象引用,但遗憾的是Marker类没有标记:(


这种方法的一个可能的警告是,哈希代码可能会在两个标记之间发生冲突。我不知道这种情况的可能性有多大,这将是一个需要研究/测试的问题。

是的,我考虑过这一点,但它似乎非常有效。不必如此,为保存两个字符串的位置和类abov创建一个小POJO制作一个HashMap,然后你可以用LatLng键直接查找该位置。嗯,这两个字符串应该是什么?我来试一试我不知道你的位置到底是什么样的,我想你有一些名字,一些文本,一个Id,Lat和Lon或者其他什么。我想说的是有一个HashMap,1.一个识别键和2.你的位置在对象上,这样您可以在点击标记时轻松查找对象。好的,那么如果执行marker.getId()然后执行hashmap.put(markerID,locationObject)?
Marker locationMarker = map.addMarker(new MarkerOptions()
    .position(position)
    .title(location.get("name"))
    .snippet(location.get("distance") + location.get("type"))                                  
    .icon(BitmapDescriptorFactory.fromResource(marker)));