Agregar identificación al marcador en la api de Google maps v2 para Android


Bueno, cada marcador en mi aplicación representará a un usuario, por lo que necesito identificar a ese usuario cuando hago clic en la ventana de información para obtener sus datos de Internet, y no puedo identificarlos por nombre por razones obvias. ¿Es posible agregar un atributo adicional a un objeto marcador? ¡Gracias!

Author: vdrg, 2013-01-16

5 answers

Podrías hacer un HashMap<Marker, User>

Consulte este tutorial: http://bon-app-etit.blogspot.be/2012/12/add-informationobject-to-marker-in.html

 38
Author: dumazy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-19 10:41:30

¿Es posible agregar un atributo adicional a un objeto marcador?

No. Marker es final. Además, los objetos Marker que cree desaparecen rápidamente, ya que solo se usan para algunas IPC en la aplicación Google Play Services. El objeto Marker que obtiene en su OnInfoWindowClickListener parece ser una copia reconstituida.

Tengo un subtítulo en el campo snippet por lo que no es una opción.

Claro que lo es. Almacenar el subtítulo en otro lugar, y poner la clave para su usuario en el subtítulo. Cuando renderice el InfoWindow desde su InfoWindowAdapter, tire del subtítulo.

 8
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-16 20:06:37

No creo que sea una buena idea mantener referencias fuertes a marcadores a través de un mapa. Dado que de todos modos usa su adaptador de ventana personalizado para renderizar contenidos, puede "abusar" del fragmento() o título() en las opciones de marcado para almacenar su información. Ambos son cadenas, por lo que dependía de la información para almacenar que usaría un poco más de memoria, por otro lado, estaría a salvo de fugas de memoria al mantener fuertes referencias a los marcadores.

Además, irías compatible con la forma en que Maps gestiona la persistencia de ti durante las paradas y los currículums.

 5
Author: comeGetSome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-26 20:46:08

Aquí hay una solución un poco más simple que he implementado. Todo lo que hace es Crear un InfoWindowAdapter que toma algo que desea pasar a la ventana en su constructor.

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;
}
}

Usted es responsable de cualquier dato que desee pasar a la ventana de información, pero puede ver aquí que estoy pasando un hash de calificaciones. Solo un prototipo y no es de ninguna manera la mejor solución, pero esto debería hacer que cualquiera comenzara.

 2
Author: wapples,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-03 17:54:08

Estoy usando una clase adicional para asociar alguna información y funciones con cada marcador. No creo que este sea el mejor enfoque, pero es una opción. Particularmente si desea tener más que solo información asociada con cada marcador de mapa. Aquí está la estructura básica que uso para esto.

//   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);
 0
Author: AlbertMarkovski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-26 00:01:38