2013-01-16 40 views
31

Vâng, mọi điểm đánh dấu trên ứng dụng của tôi sẽ đại diện cho người dùng, vì vậy tôi cần xác định người dùng đó khi tôi nhấp vào cửa sổ thông tin để lấy dữ liệu từ Internet và tôi có thể 't làm cho nó xác định chúng theo tên vì lý do rõ ràng. Có thể thêm thuộc tính bổ sung vào đối tượng điểm đánh dấu không? cảm ơn!Thêm nhận dạng vào điểm đánh dấu trên google maps v2 api cho android

+0

bạn đã thêm điểm đánh dấu như thế nào? như lớp phủ? –

+0

Bạn có thể sử dụng trường đoạn trích của lớp Marker. –

+0

Tôi có một phụ đề trong trường đoạn mã nên đó không phải là một tùy chọn. Bạn có ý nghĩa gì khi lớp phủ? Tôi thêm chúng với map.addMarker (... – vdrg

Trả lời

8

Có thể thêm thuộc tính bổ sung vào đối tượng điểm đánh dấu không?

No. Markerfinal. Ngoài ra, các đối tượng Marker bạn tạo biến mất nhanh chóng, vì chúng chỉ được sử dụng cho một số IPC đối với ứng dụng Dịch vụ của Google Play. Đối tượng Marker mà bạn nhận được trong số OnInfoWindowClickListener của bạn dường như là bản sao được hoàn nguyên.

Tôi có phụ đề trong trường đoạn mã nên đó không phải là tùy chọn.

Chắc chắn là vậy. Lưu trữ phụ đề ở một nơi khác và đặt khóa của bạn cho người dùng của bạn trong phụ đề. Khi bạn hiển thị InfoWindow từ số InfoWindowAdapter của mình, hãy kéo phụ đề.

2

Dưới đây là một giải pháp đơn giản hơn một chút tôi đã thực hiện. Tất cả những gì bạn làm là tạo một InfoWindowAdapter, cái mà bạn muốn chuyển đến cửa sổ trong hàm tạo của nó.

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

Bạn chịu trách nhiệm về bất kỳ dữ liệu nào bạn muốn chuyển đến cửa sổ thông tin, nhưng bạn có thể thấy ở đây rằng tôi đang chuyển băm xếp hạng. Chỉ là một nguyên mẫu và không phải là giải pháp tốt nhất nhưng điều này sẽ khiến mọi người bắt đầu.

+0

Lưu ngày của tôi .. cảm ơn bạn thân – Noman

5

Tôi không nghĩ rằng nên giữ tham chiếu mạnh mẽ cho các điểm đánh dấu thông qua bản đồ. Vì bạn vẫn sử dụng bộ điều hợp cửa sổ tùy chỉnh của mình để hiển thị nội dung, bạn có thể "lạm dụng" đoạn mã() hoặc tiêu đề() trên MarkerOptions để lưu trữ thông tin của bạn. Cả hai đều là chuỗi, do đó phụ thuộc vào thông tin để lưu trữ, bạn sẽ sử dụng ít bộ nhớ hơn, mặt khác bạn sẽ an toàn khỏi rò rỉ bộ nhớ bằng cách giữ các tham chiếu mạnh mẽ đến các điểm đánh dấu.

cũng vậy, bạn sẽ tương thích với cách Maps quản lý nó liên tục trong các điểm dừng và tiếp tục.

0

Tôi đang sử dụng lớp bổ sung để liên kết một số thông tin và chức năng với mỗi điểm đánh dấu. Tôi không nghĩ đây là cách tiếp cận tốt nhất, nhưng đó là một lựa chọn. Đặc biệt nếu bạn muốn có nhiều hơn là chỉ thông tin được liên kết với mỗi điểm đánh dấu trên bản đồ. Đây là cấu trúc cơ bản tôi sử dụng cho việc này.

// 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); 
Các vấn đề liên quan