问题描述
我最近将 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();