Java VS2019更新导致FragmentManager错误

Java VS2019更新导致FragmentManager错误,java,android,xamarin,android-fragmentactivity,Java,Android,Xamarin,Android Fragmentactivity,我最近将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 fragmen

我最近将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);
}
void OnMenuItemSelected(对象发送方,Android.Support.Design.Widget.NavigationView.NavigationItemSelectedEventArgs e)
{
Vars.OnMain=false;//在主屏幕打开之前关闭屏幕更新
开关(e.MenuItem.ItemId)
{
case Resource.Id.aboutMenuItem:导航(新的AboutFragment());中断;
case Resource.Id.catalogMenuItem:导航(新建CatalogFragment());中断;
//case Resource.Id.itemMenuItem:导航(new ItemFragment());中断;
case Resource.Id.helpMenuItem:导航(新HelpFragment());中断;
case Resource.Id.SettingsMemountItem:导航(新设置片段());中断;
案例资源.Id.CoordinationUITEM:导航(新的CoordinationRefragment());中断;
case Resource.Id.mainMenuItem:导航(新的MainScreenFragment());中断;
默认:返回;
}
e、 MenuItem.SetChecked(true);
//var drawerLayout=findviewbyd(Resource.Id.drawerLayout);
drawerLayout.CloseDrawer(Android.Support.V4.View.GravityCompat.End);
}
该应用已运行多年,太大,无法在此处发布

在过去一年中,VS2019环境是否发生了可能导致此问题的变化

谢谢你的帮助,
Dan

从您发布的以下代码中,我们发现您正在从
base
变量获取片段管理器。base本身从哪里获得碎片管理器?当您导航时,活动可能已被销毁并重新创建。因此,您可能需要一个新的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();

我试过你的建议,但我也犯了同样的错误。这段代码是多年前由Xamarin生成的。使用新系统处理碎片的正确方法是什么?请您将一个基本的演示发布到github或onedriver,这样我们就可以自己尝试了。虽然程序本身太大,无法发布,但它是从Xamarin和205课程的第一部分派生出来的。(导航模式)当然,课程中的材料不再使用当前的VS2019构建。我正在修改课程材料,使其能够编译。有更新吗?你的问题解决了吗?