Подтвердить что ты не робот

Добавить идентификацию маркера на google maps v2 api для Android

Ну, каждый маркер в моем приложении будет представлять пользователя, поэтому мне нужно идентифицировать этого пользователя, когда я нажимаю информационное окно, чтобы получить его данные из Интернета, и я не могу определить его по имени по очевидным причинам, Можно ли добавить дополнительный атрибут к объекту-маркеру? спасибо!

4b9b3361

Ответ 2

Можно ли добавить дополнительный атрибут к объекту-маркеру?

Нет. Marker - final. Кроме того, создаваемые объекты Marker исчезают быстро, поскольку они используются только для некоторых IPC в приложении Google Play Services. Объект Marker, который вы получаете в своем OnInfoWindowClickListener, кажется, является восстановленной копией.

У меня есть субтитры в поле фрагмента, поэтому не вариант.

Конечно. Сохраните субтитры где-нибудь еще и поместите свой ключ в свой пользователь в субтитрах. Когда вы выведете InfoWindow из своего InfoWindowAdapter, потяните субтитры.

Ответ 3

Я не думаю, что это хорошая идея, чтобы сохранить сильные ссылки на маркеры через карту. Поскольку вы в любом случае используете свой пользовательский оконный адаптер для визуализации содержимого, вы можете "злоупотреблять" фрагментом() или заголовком() на MarkerOptions для хранения вашей информации. Они оба являются строками, поэтому в зависимости от информации, которую вы храните, вы будете немного использовать больше памяти, с другой стороны вы будете в безопасности от утечек памяти, удерживая ссылки на маркеры.

Кроме того, вы соглашаетесь с тем, как Карты управляют этой устойчивостью во время остановок и возобновлений.

Ответ 4

Вот несколько более простое решение, которое я реализовал. Все, что вы делаете, это Create a InfoWindowAdapter, который берет то, что вы хотите передать в его конструктор.

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

Вы несете ответственность за любые данные, которые хотите передать в информационное окно, но вы можете видеть здесь, что я передаю хэш оценок. Просто прототип и отнюдь не лучшее решение, но это должно заставить кого-нибудь начать.

Ответ 5

Я использую дополнительный класс для связывания некоторой информации и функций с каждым маркером. Я не думаю, что это лучший подход к нему, но это вариант. В частности, если вы хотите иметь больше, чем просто информацию, связанную с каждым маркером карты. Вот базовая структура, которую я использую для этого.

//   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);