Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 谷歌地图-75个标记-对话片段_C#_Android_Google Maps_Xamarin - Fatal编程技术网

C# 谷歌地图-75个标记-对话片段

C# 谷歌地图-75个标记-对话片段,c#,android,google-maps,xamarin,C#,Android,Google Maps,Xamarin,我在地图上有75个标记,每一个都会在单击时显示我的DialogFragment子类。片段使用存储在strings.xml(3x75)中的3个字符串 有没有更好的方法来识别单击的标记并使用相应的信息显示DialogFragment,而不是像这样编写75个if语句(将其位置与所有位置的我的列表进行比较) 编辑: 位置是这样添加的 private void AddLocations() { mLokacije = new List<LatLng>();

我在地图上有75个标记,每一个都会在单击时显示我的DialogFragment子类。片段使用存储在strings.xml(3x75)中的3个字符串

有没有更好的方法来识别单击的标记并使用相应的信息显示DialogFragment,而不是像这样编写75个
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 ... } 

谢谢你的帮助:)

至于弦乐部分,很简单。创建一个按名称获取资源字符串的方法:

private string GetStringByName(string name)
{
    var id = Resources.GetIdentifier(name, "string", PackageName);
    return id == 0 ? string.Empty : Resources.GetText(id);
}
对于颜色,我不知道比创建列表(或哈希集,如果您愿意)更好的方法:

如果IndexOf因任何原因不起作用,您可以找到如下索引:

var index = mLokacije.IndexOf(pos); // assuming mLokacije is a List<>
var lok_naslov = GetStringByName($"lok{index}_naslov");
var lok_sitno = GetStringByName($"lok{index}_sitno");
var lok_opis = GetStringByName($"lok{index}_opis");

dialog_Informacije informacijeDialog = new dialog_Informacije(lok_naslov,
            lok_sitno,
            lok_opis,
            GetString(colors.IndexOf(index)));
informacijeDialog.Show(transaction, "dialog fragment");
var index = mLokacije.FindIndex(position => position.Lat == pos.Lat && position.Lng == pos.Lng);

好吧,你可以为此制作一个大的散列图。你的解决方案很好,但我有一个问题。var指数=mLokacije.IndexOf(pos);始终将索引设置为0。偶数var indexplus=mLokacije.IndexOf(pos)+1;和var indexplus=mLokacije.LastIndexOf(pos)+1。。。两者都返回0,这使我认为mLokacije列表中的对象与从e.Marker.Position获得的实例不同。只有在比较相同的实例时,List.IndexOf才会起作用,而不仅仅是值eah,这就是我要说的。IndexOf无法工作的唯一原因是在数组中找不到该对象。你可能会使用重复的标记吗?您可以编辑您的问题并添加有关如何实际填充mLokacije数组的更多信息。然后我可以帮助betterI使用我用来比较点击事件位置的相同列表绘制标记。(用于循环)(…)选项。设置位置(mLokacije[i]);(…)好吧,所以不管什么原因,它都不起作用。正如您所说的,两个位置不能相等,您可以编写一个for()语句并比较lat/long以获得索引
private string GetStringByName(string name)
{
    var id = Resources.GetIdentifier(name, "string", PackageName);
    return id == 0 ? string.Empty : Resources.GetText(id);
}
var colors = new List<int>
{
    Resource.String.dialog_green,
    Resource.String.dialog_red,
    Resource.String.dialog_green,
    Resource.String.dialog_green,
    Resource.String.dialog_green,
    Resource.String.dialog_red,
    etc...
};
var index = mLokacije.IndexOf(pos); // assuming mLokacije is a List<>
var lok_naslov = GetStringByName($"lok{index}_naslov");
var lok_sitno = GetStringByName($"lok{index}_sitno");
var lok_opis = GetStringByName($"lok{index}_opis");

dialog_Informacije informacijeDialog = new dialog_Informacije(lok_naslov,
            lok_sitno,
            lok_opis,
            GetString(colors.IndexOf(index)));
informacijeDialog.Show(transaction, "dialog fragment");
var position = new LatLng(50.379444, 2.773611);
mLokacije.Add(position);

MarkerOptions options = new MarkerOptions();
options.SetPosition(position);
map.AddMarker(marker1);
var index = mLokacije.FindIndex(position => position.Lat == pos.Lat && position.Lng == pos.Lng);