У меня есть 75 маркеров на карте, и каждый из них при нажатии вызывает мой подкласс DialogFragment. Фрагмент использует 3 строки, хранящиеся в Strings.xml (3x75).Карты Google - 75 маркеров - Диалог Фрагменты
Есть ли лучший способ распознавания Clicked маркера и воспитывая DialogFragment с соответствующей информацией, чем писать 75 if
заявления, как это (сравнивая свое положение с моей List<LatLng>
всех мест)
var pos = e.Marker.Position;
FragmentTransaction transaction = FragmentManager.BeginTransaction();
if (pos.Equals(mLokacije[0]))
{
dialog_Informacije informacijeDialog = new dialog_Informacije(GetString(Resource.String.lok1_naslov),
GetString(Resource.String.lok1_sitno),
GetString(Resource.String.lok1_opis),
GetString(Resource.String.dialog_green));
informacijeDialog.Show(transaction, "dialog fragment");
}
else if (pos.Equals(mLokacije[1]))
{
dialog_Informacije informacijeDialog = new dialog_Informacije(GetString(Resource.String.lok2_naslov),
GetString(Resource.String.lok2_sitno),
GetString(Resource.String.lok2_opis),
GetString(Resource.String.dialog_red));
informacijeDialog.Show(transaction, "dialog fragment");
}
else if
{ ...
EDIT:
Локации добавлены как этот
private void AddLocations()
{
mLokacije = new List<LatLng>();
mLokacije.Add(new LatLng(43.511095, 16.436985)); //1
mLokacije.Add(new LatLng(43.5095654, 16.4392571)); //2
mLokacije.Add(new LatLng(43.5095598, 16.4393218)); //3
mLokacije.Add(new LatLng(43.509010, 16.440499)); //4
mLokacije.Add(new LatLng(43.509029, 16.440431)); //5
mLokacije.Add(new LatLng(43.508883, 16.440532)); //6
mLokacije.Add(new LatLng(43.508732, 16.440807)); //7
mLokacije.Add(new LatLng(43.508815, 16.440154)); //8 ... }
-> Этот метод вызывается в OnCr ЭАТС
Маркеры рисуются так:
private void DrawMarkersAndFillColors()
{
mColors = new List<string>(new string[mLokacije.Count]);
MarkerOptions options = new MarkerOptions();
for (int i = 0; i < mLokacije.Count; i++)
{
options.SetPosition(mLokacije[i]);
switch (i)
{
case 55:
case 57:
case 60:
options.SetIcon(BitmapDescriptorFactory.DefaultMarker(BitmapDescriptorFactory.HueGreen));
mColors[i] = GetString(Resource.String.dialog_green);
break;
case 43:
case 46:
case 52:
options.SetIcon(BitmapDescriptorFactory.DefaultMarker(BitmapDescriptorFactory.HueRed));
mColors[i] = GetString(Resource.String.dialog_red);
break;
.....}
mMap.AddMarker(options);
}
-> это называется в OnMapReady
FINAL EDIT:
Ваше решение работает:
var indexPlus = mLokacije.FindIndex(position => position.Latitude == pos.Latitude && position.Longitude == pos.Longitude) + 1;
Спасибо за вашу помощь :)
Ну, вы можете сделать большой hash_map для этого –