我在地图上有75个标记,每当点击一个标记时,就会弹出我定义的 DialogFragment。Fragment 使用了 Strings.xml 中存储的 3 个字符串(共计 3x75 个字符串)。
是否有更好的方法来识别已点击的标记,并带出相应信息的 DialogFragment,而不是编写 75 个 if 语句(将其位置与我的所有位置的 List 进行比较)?
感谢您的帮助 :)
是否有更好的方法来识别已点击的标记,并带出相应信息的 DialogFragment,而不是编写 75 个 if 语句(将其位置与我的所有位置的 List 进行比较)?
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
{ ...
编辑:
添加位置的方法如下
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 ... }
-->这个方法在OnCreate中被调用
标记是这样绘制的:
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中调用的。
最终编辑:
您的解决方案可行:
var indexPlus = mLokacije.FindIndex(position => position.Latitude == pos.Latitude && position.Longitude == pos.Longitude) + 1;
感谢您的帮助 :)