在InfoWindowClick

时间:2015-05-06 09:57:29

标签: android android-fragments xamarin.android google-maps-markers google-maps-android-api-2

所以我试图在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。

任何人都能看到我的代码存在什么问题?尝试了很多东西,但似乎无法与我的朋友谷歌一起解决这个问题。

非常感谢您阅读。 亲切的问候, 卡尔

0 个答案:

没有答案