微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VS2019 更新出现 FragmentManager 错误

如何解决VS2019 更新出现 FragmentManager 错误

我最近将 VisualStudio 2019 的安装从 16.4.19 升级到 16.9.3 清理了一些错误后,它构建得很好。 当我尝试在 7.0 平板电脑上部署和运行它时,我收到以下消息:

java.lang.IllegalStateException Message=FragmentManager has not been attached to a host.

这是产生问题的代码

void Navigate(Android.Support.V4.App.Fragment fragment)
{
    var transaction = base.SupportFragmentManager.BeginTransaction();
    transaction.Replace(Resource.Id.contentFrame,fragment);
    transaction.Commit();
}

这段代码调用它:

void OnMenuItemSelected(object sender,Android.Support.Design.Widget.NavigationView.NavigationItemSelectedEventArgs e)
{
    Vars.OnMain = false;    //turn off screen updates until mainscreen is open
    switch (e.MenuItem.ItemId)
    {
        case Resource.Id.aboutMenuItem: Navigate(new AboutFragment()); break;
        case Resource.Id.catalogMenuItem: Navigate(new CatalogFragment()); break;
        //case Resource.Id.itemmenuItem: Navigate(new ItemFragment()); break;
        case Resource.Id.helpMenuItem: Navigate(new HelpFragment()); break;
        case Resource.Id.settingsMenuItem: Navigate(new SettingsFragment()); break;
        case Resource.Id.coordinateMenuItem: Navigate(new CoordinateFragment()); break;
        case Resource.Id.mainMenuItem: Navigate(new MainScreenFragment()); break;
        default: return;
    }

    e.MenuItem.SetChecked(true);

    //var drawerLayout = FindViewById<Android.Support.V4.Widget.DrawerLayout>(Resource.Id.drawerLayout);
    drawerLayout.CloseDrawer(Android.Support.V4.View.GravityCompat.End);
}

该应用已运行多年,太大,无法在此处发布。

去年 VS2019 环境有什么变化会导致这个问题吗?

感谢您的帮助, 丹

解决方法

从您发布的以下代码中,我们发现您正在从 base 变量获取片段管理器。 base 本身从哪里获得 FragmentManager?当您 Navigate 时,活动可能会被销毁并重新创建。因此,您可能需要获得一个新的 FragmentManager。

void Navigate(Android.Support.V4.App.Fragment fragment)
{
    var transaction = base.SupportFragmentManager.BeginTransaction();
    transaction.Replace(Resource.Id.contentFrame,fragment);
    transaction.Commit();
}

所以,您可以尝试使用以下代码:

FragmentTransaction transaction = FragmentManager.BeginTransaction ();
transaction.Replace(Resource.Id.contentFrame,fragment);
transaction.Commit();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。