Как можно дать каждому маркеру свой номер, название?
Делаю мобильное приложение на основе Google Maps. Данные для маркеров беру из БД Firebase, заношу их в HashMap:
HashMap<String, Double> dataDouble = (HashMap<String, Double>) dataSnapshot.getValue();
double latitude = dataDouble.get("latitude");
double longitude = dataDouble.get("longitude");
HashMap<String, String> dataString = (HashMap<String, String>) dataSnapshot.getValue();
String name = dataString.get("name");
final String address = dataString.get("address");
LatLng location = new LatLng(latitude, longitude);
map.addMarker(new MarkerOptions().position(location));
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
//getActivity() берет активность, в которой запущен наш фрагмент
Intent intent = new Intent(getActivity(), InfoActivity.class);
intent.putExtra("address", address); // добавляем в интент
startActivity(intent);
return false;
}
});
}
В итоге в интент отправляется адрес последнего маркера. А как можно отправить все адреса из БД и связать их с каждым маркером? Была идея занести все адреса в ArrayList и отправлять в интенте номер нужного нам адреса, но тогда возникает другой вопрос: как можно дать каждому маркеру свой номер, название?
Ответы (2 шт):
У маркера есть метод setTag(). Вы можете задать нужный вам тэг для вашего маркера.
Ещё можно вызвать у маркера метод marker.snippet, который на вход принимает Object и хранить в нем свои кастомные данные.
Третий вариант, вы когда вы добавляете маркеры методом googleMap.addMarker() возвращает вам экземпляр маркера и вы можете хранить HashMap где ключ маркер, а значением ваши данные.
Более подробно можно поглядеть тут пот работе с маркерами
https://developers.google.com/maps/documentation/android-sdk/marker
Все маркеры можно занести в ArrayList.
marker = map.addMarker(new MarkerOptions().position(location));
marker_info.add(marker);
Дальше в методе onMarkerClick мы добавляем в интент адрес места из ArrayList с индексом, который имеет наш кликнутый маркер.
intent.putExtra("address", address_info.get(marker_info.indexOf(marker)));