2012-12-27 32 views
27

Trong ứng dụng của tôi, tôi có một số đối tượng được hiển thị trên bản đồ bằng cách sử dụng các điểm đánh dấu. Vấn đề là cách duy nhất tôi đã tìm thấy để xử lý nhấp chuột đánh dấu làKết hợp một đối tượng với Marker (google map v2)

googleMap.setOnMarkerClickListener(new ... { 
    @Override 
    public void onMarkerClick(Marker marker) { 
     // how to get the object associated to marker??? 
    } 
}) 

Nói cách khác tôi nhận được đối tượng Marker trong khi giao diện duy nhất mà tôi có cho phép tôi để thiết lập chỉ MarkerOptions.

Bất kỳ cách nào để liên kết Marker với đối tượng?

Trả lời

24

Bạn có thể kết hợp đối tượng tùy ý bằng cách sử dụng Marker 's setTag() phương pháp

Marker amarker = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World")); 
amarker.setTag(new SomeData()); 

Để lấy dữ liệu liên quan đến điểm đánh dấu, bạn chỉ cần đọc nó bằng cách sử getTag() nó và sau đó bỏ nó vào loại ban đầu của nó.

SomeData adata = (SomeData) amarker.getTag(); 

More information

+0

Đây là giải pháp đúng. Theo tài liệu về Thẻ trong Marker: "Một đối tượng liên kết với điểm đánh dấu. Ví dụ, đối tượng có thể chứa dữ liệu về điểm đánh dấu thể hiện. Điều này dễ dàng hơn việc lưu trữ một Bản đồ riêng ." – JDenais

+0

Dịch vụ Play 9.4 – hibob

+0

Đây là giải pháp RIGHT! –

54

Tôi cho rằng cuộc gọi lại này không được đội ngũ Android rất kỹ lưỡng, nhưng đó là những gì chúng tôi có.

Bất cứ khi nào bạn gọi mMap.addMarker();, nó sẽ trả về điểm đánh dấu đã tạo. Sau đó bạn có thể sử dụng một HashMap hoặc một số cấu trúc giữ dữ liệu khác để ghi nhớ nó.

// Create the hash map on the beginning 
WeakHashMap <Marker, Object> haspMap = new WeakHashMap <Marker, Object>(); 


// whenever adding your marker 
Marker m = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World").icon(icon_bmp)); 
haspMap.put(m, your_data); 
+8

Tôi khuyên bạn nên 'WeakHashMap', vì vậy khi một' Marker' được thu gom rác, như vậy sẽ liên quan Mục 'WeakHashMap' và nó 'Object' giá trị. Nhưng, vâng, tiếc là điều này dường như là lựa chọn duy nhất hiện nay. – CommonsWare

+1

hợp lý với tôi. Tôi đã chỉnh sửa câu trả lời của mình thành WeakHashMap. Ổn chứ? – Budius

+0

Điều đó có vẻ đúng. – CommonsWare

8

Một tùy chọn khác là tạo Bản đồ có khóa là marker.getId() và giá trị là đối tượng của chúng tôi.

Bằng cách này, chúng tôi sẽ không giữ một tham chiếu đến một Marker trong bộ nhớ, và sẽ không phải lo lắng về các dấu rác thu thập được.

Tại đây, bạn có thể xem more answers.

Các vấn đề liên quan