varios studio marcadores infowindowadapter google example custom color agregar android api google-maps-markers google-maps-android-api-2

studio - Añadir identificación al marcador en google maps v2 api para Android



marker color google maps (5)

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


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

No. Marker es final . Además, los objetos Marker que crea se desvanecen rápidamente, ya que solo se usan para algunos IPC en la aplicación Google Play Services. El objeto Marker que obtienes en tu OnInfoWindowClickListener parece ser una copia reconstituida.

Tengo un subtítulo en el campo de fragmento así que no es una opción.

Claro que lo es. Guarde los subtítulos en otro lugar y coloque su clave en el subtítulo. Cuando represente InfoWindow desde su InfoWindowAdapter , extraiga los subtítulos.


Aquí hay una solución un poco más simple que he implementado. Todo lo que debes hacer es crear un InfoWindowAdapter que tome algo que quieras 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 los datos que desea pasar a la ventana de información, pero puede ver aquí que estoy pasando un hash de calificaciones. Solo un prototipo y de ninguna manera es la mejor solución, pero esto debería hacer que cualquiera comience.


Estoy usando una clase adicional para asociar cierta 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 información que la asociada a 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);


No creo que sea una buena idea mantener referencias sólidas a los marcadores a través de un mapa. Como de todos modos usa su adaptador de ventana personalizado para representar el contenido, puede "abusar" del fragmento () o título () en MarkerOptions para almacenar su información. Ambas son cadenas, por lo que, dependiendo de la información que almacenas, usarías un poco más de memoria, del otro lado estarías a salvo de fugas de memoria al tener referencias sólidas a los marcadores.

Además, sería compatible con la forma en que Maps lo maneja con persistencia durante paradas y reanudaciones.