【问题标题】:Add identification to marker on google maps v2 api for android在 google maps v2 api for android 上为标记添加标识
【发布时间】:2012-12-31 05:12:38
【问题描述】:

好吧,我的应用程序上的每个标记都代表一个用户,所以当我单击信息窗口以从 Internet 获取其数据时,我需要识别该用户,并且由于显而易见的原因,我无法通过名称识别他们.是否可以向标记对象添加额外的属性?谢谢!

【问题讨论】:

  • 你是如何添加标记的?作为覆盖?
  • 可以使用Marker类的sn-p字段。
  • 我在 sn-p 字段中有一个字幕,所以这不是一个选项。你是什​​么意思覆盖?我用 map.addMarker(... 添加它们

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


【解决方案1】:

你可以发HashMap<Marker, User>

查看本教程: http://bon-app-etit.blogspot.be/2012/12/add-informationobject-to-marker-in.html

【讨论】:

  • 这应该被标记为正确答案。完美运行。简单易学的教程。
【解决方案2】:

是否可以为标记对象添加额外的属性?

没有。 Markerfinal。此外,您创建的 Marker 对象很快就会消失,因为它们仅用于某些 IPC 到 Google Play 服务应用程序。您在OnInfoWindowClickListener 中获得的Marker 对象似乎是一个重组副本。

我在 sn-p 字段中有一个字幕,所以这不是一个选项。

确实如此。将字幕存储在其他地方,并将您的用户密钥放在字幕中。当您从 InfoWindowAdapter 渲染 InfoWindow 时,拉入字幕。

【讨论】:

    【解决方案3】:

    我认为通过地图保持对标记的强引用不是一个好主意。由于您无论如何都使用自定义窗口适配器来呈现内容,因此您可以“滥用” MarkerOptions 上的 sn-p() 或 title() 来存储您的信息。它们都是字符串,因此取决于要存储的信息,您会稍微使用更多的内存,另一方面,您可以通过持有对标记的强引用来避免内存泄漏。

    此外,您还可以兼容 Maps 在停止和恢复期间管理其持久性的方式。

    【讨论】:

      【解决方案4】:

      这是我实施的一个稍微简单的解决方案。你所要做的就是创建一个 InfoWindowAdapter,它将你想要传递给窗口的东西在它的构造函数中。

      class CustomWindowAdapter implements InfoWindowAdapter{
      LayoutInflater mInflater;
      private HashMap<Marker, Double> mRatingHash;
      
      public CustomWindowAdapter(LayoutInflater i, HashMap<Marker, Double> h){
          mInflater = i;
          mRatingHash = h;
      }
      
      @Override
      public View getInfoContents(Marker marker) {
           // Getting view from the layout file
          View v = mInflater.inflate(R.layout.custom_info_window, null);
      
          TextView title = (TextView) v.findViewById(R.id.tv_info_window_title);
          title.setText(marker.getTitle());
      
          TextView description = (TextView) v.findViewById(R.id.tv_info_window_description);
          description.setText(marker.getSnippet());
      
          RatingBar rating = (RatingBar) v.findViewById(R.id.rv_info_window);
          Double ratingValue = mRatingHash.get(marker);
          rating.setRating(ratingValue.floatValue());
          return v;
      }
      
      @Override
      public View getInfoWindow(Marker marker) {
          // TODO Auto-generated method stub
          return null;
      }
      }
      

      您要对要传递到信息窗口的任何数据负责,但您可以在此处看到我正在传递评级的哈希值。只是一个原型,绝不是最好的解决方案,但这应该能让任何人开始。

      【讨论】:

        【解决方案5】:

        我正在使用一个附加类将一些信息和功能与每个标记相关联。我不认为这是最好的方法,但它是一种选择。特别是如果您想要的不仅仅是与每个地图标记相关联的信息。这是我用于此的基本结构。

        //   Make an array list of for all of your things
        ArrayList<Thing> things;
        
        class Thing {
            long thing_key;
            String thing_string;
            int thingRadius;
            Double coord_long;
            Double coord_lat;
            Marker marker;
        }
        
        //    Then to use this to start your list.
        things = new ArrayList<>();
        
        //   Create the thing object and save all the data
        thing = new Thing();
        thing.marker = thingMarker;
        thing.thing_key = thing_key;
        thing.thing_string = thing_string;
        thing.radius = Integer.getInteger(thingRadius.getText().toString());
        
        //    Save the thing to the thing ArrayList
        things.add(thing);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-14
          • 1970-01-01
          • 1970-01-01
          • 2013-03-14
          • 2013-04-02
          • 1970-01-01
          • 2012-11-22
          • 2015-06-04
          相关资源
          最近更新 更多