2013-01-16 15 views
31

Cóż, każdy znacznik w mojej aplikacji będzie reprezentował użytkownika, więc muszę zidentyfikować tego użytkownika po kliknięciu okna informacji, aby uzyskać jego dane z Internetu, i mogę sprawiają, że identyfikuje ich imiona z oczywistych powodów. Czy można dodać dodatkowy atrybut do obiektu znacznika? dzięki!Dodaj identyfikację do znacznika na mapach google maps v2 api dla Androida

+0

w jaki sposób dodano znaczniki? jako nakładka? –

+0

Możesz użyć pola snippet klasy Marker. –

+0

Mam podtytuł w polu snippet, więc nie jest to opcja. Co masz na myśli jako nakładkę? Dodaję je z map.addMarker (... – vdrg

Odpowiedz

8

Czy można dodać dodatkowy atrybut do obiektu znacznika?

nr Marker jest final. Utworzone obiekty Marker szybko znikają, ponieważ są używane tylko w niektórych usługach IPC do aplikacji usług Google Play. Obiekt Marker, który otrzymasz w swojej jednostce OnInfoWindowClickListener, wydaje się być odtworzoną kopią.

Mam podtytuł w polu fragmentu, więc nie jest to opcja.

Pewnie, że tak. Przechowuj podtytuły w innym miejscu i umieść swój klucz w swoim podtytule. Po renderowaniu InfoWindow ze swojego InfoWindowAdapter, wciągnij napisy.

2

Oto nieco prostsze rozwiązanie, jakie realizowane. Wszystko, co robisz, to Utwórz InfoWindowAdapter, który przenosi coś, co chcesz przekazać do okna w jego konstruktorze.

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

Jesteś odpowiedzialny za cokolwiek dane chcesz przejść do okna informacyjnego, ale widać tutaj, że jestem przechodzącej hash ocen. To tylko prototyp i nie jest najlepszym rozwiązaniem, ale powinno się zacząć od każdego.

+0

Uratowałem mój dzień .. dziękuję kolego – Noman

5

Nie sądzę, że dobrym pomysłem jest utrzymywanie silnych odniesień do znaczników za pomocą mapy. Ponieważ i tak używasz niestandardowego adaptera okna do renderowania zawartości, możesz "nadużyć" fragmentu kodu() lub tytułu() w MarkerOptions, aby przechowywać informacje. Oba są łańcuchami, więc zależą od informacji do przechowywania, zużywałbyś nieco więcej pamięci, z drugiej strony byłbyś bezpieczny przed wyciekami pamięci poprzez utrzymywanie silnych odniesień do znaczników.

również można pogodzić z tym, w jaki sposób Mapy Google zarządzają jego trwałością podczas postojów i wznawiania.

0

Używam dodatkowej klasy do powiązania niektórych informacji i funkcji z każdym znacznikiem. Nie sądzę, że jest to najlepsze podejście, ale jest to opcja. Zwłaszcza jeśli chcesz mieć więcej niż tylko informacje związane z każdym znacznikiem mapy. Oto podstawowa struktura, której używam do tego.

// 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); 
Powiązane problemy