将Marker对象映射到可存储的Data对象

时间:2014-05-29 12:49:38

标签: android google-maps-android-api-2

我正在试图找出处理Marker对象与包含数据的自定义对象分离的最佳方法,并且可以在销毁Activity时将其存储在片段中。

我想:

  1. 在地图上显示多个移动实体的位置。

  2. 调用onDestroy()时存储每个实体的数据。

  3. 在侧栏上显示有关所选实体的其他信息

  4. 对于每个位置,我创建一个存储在HashMap上的标记:

    private HashMap<String, Marker> markers;
    
    private Marker createNewMarker(String sourceName) {
       Marker marker;
       marker = mMap.addMarker(new MarkerOptions()
          .position(new LatLng(0, 0)));
       marker.setIcon(BitmapDescriptorFactory
          .fromResource(R.drawable.ic_sys));
       markers.put(sourceName, marker);
       return marker;
    }
    

    当我通过网络收到有关实体的信息时,我会更新标记:

    private Fragment dataFrag;
    private final Handler uiHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        // Message has both an unique id and a name that will change
        // Update the data in the Fragment 
        // Update marker fields
     }
    

    单击标记时,有关它的信息将显示在侧栏中

    mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
    
    @Override
    public boolean onMarkerClick(Marker marker) {
        // Identify what entity the markers refers to
        // Marker only has the name (which changes) in the title
        // HELP HERE!!!
        // Update labels
        return true;
    });
    });
    

    我不知道O(1)只根据名称(没有id)找到实体的方法。
    我可以在标记中存储其他值吗? 我应该扩展Marker类并添加另一个字段吗? 什么是最好的方法?

    我不得不将Marker与实体数据分开,以便我可以将数据存储在Fragment中而不存储标记。

    所有帮助非常感谢

1 个答案:

答案 0 :(得分:1)

每个标记在创建时都会分配一个新的唯一ID。 不要将“隐藏”数据直接添加到标记中,只需保留一张地图,该地图将标记的ID映射到附加数据。

在你的情况下,这可能是一个类似于你的标记 - 地图的地图,但是以相反的方式组织:

markerToSourceMap.put(marker.getId(), sourceName);

在onMarkerClick中,您可以通过

检索sourceName
sourceName = markerToSourceMap.get(marker.getId());