所以我试图在android xamarin中执行以下操作。
当您按下地图元素时,会显示信息窗口。当您按下该窗口并且事件链接到该元素时,该应用程序将转到该操作对象描述的另一个片段。问题是,当我按下infowindow时整个应用程序冻结,没有任何反应。在日志中,我看不到任何内容,应用程序停在以下行:
pager.Adapter = pagerAdapter;
在那里添加了一个断点,然后说"跳过" ide不再中断,应用程序冻结(无法进行用户交互)。
所以让我首先给出所有相关代码和一些解释。 首先,我将向您展示infowindow点击发生了什么。这发生在具有它自己的监听器的SupportMapFragment上。
void GoogleMap.IOnInfoWindowClickListener.OnInfoWindowClick (Marker p0)
{
InfoPopup ip = CustomJsonConverter.Convert<InfoPopup> (p0.Title);
if (ip == null || ip.Goto == null || !(this.Activity is MainView))
return;
MainView main = (this.Activity as MainView);
p0.HideInfoWindow ();
switch (ip.Goto.type) {
case "InfoFragment":
Info info = InfoController.Items.Find (x => x.Index == ip.Goto.id);
if (info != null) {
main.RunOnUiThread (() => {
main.ShowInfosFragment ();
main.ShowInfoFragment (info);
});
}
break;
case "FaqFragment":
FaQ faq = FaQController.Items.Find (x => x.Index == ip.Goto.id);
if (faq != null) {
main.RunOnUiThread (() => {
main.ShowFaqsFragment ();
main.ShowFaqFragment (faq);
});
}
break;
}
}
我用InfoFragment的一个动作测试了它,它给了一个项目以便它很好。然后它转到main.ShowInfosFragment(),它就是冻结的地方。所以这种方法非常简单。这个函数在包含片段的Activity中(感谢Cheesebaron)。
public void ShowInfosFragment(){
ShowFragment(1, new InfosFragment (){ InfoSelectedAction = ShowInfoFragment });
}
因此给出功能的问题如下。这个函数在包含片段的Activity中(感谢Cheesebaron)。
protected void ShowFragment(int index, Android.Support.V4.App.Fragment fragment, bool ignoreType = false){
RemoveSubMenu();
if (pagerAdapter.Count <= index || ignoreType || !(pagerAdapter.GetItem (index).GetType().Equals(fragment.GetType()))) {
pagerAdapter.AddFragment (index, fragment);
SetSubMenu (fragment);
pager.Adapter = pagerAdapter;
}
pager.SetCurrentItem (index, true);
DrawerButtonLayout ();
}
我已经使用了很多这个功能,它总是从菜单中移动到其他片段或者在启动时设置mapfragment。
任何人都能看到我的代码存在什么问题?尝试了很多东西,但似乎无法与我的朋友谷歌一起解决这个问题。
非常感谢您阅读。 亲切的问候, 卡尔