将AndroidX.Fragment.App.Fragment转换为Android.Support.V4.App.Fragment报错
解决AndroidX与Support.V4 Fragment类型不兼容问题
问题场景
使用MvvmCross编写Xamarin.Android代码时,将代码中的var fragment修改为Android.Support.V4.App.Fragment fragment后,出现错误提示:
无法将类型'AndroidX.Fragment.App.Fragment'隐式转换为'Android.Support.V4.App.Fragment'
相关代码如下:
using Android.App; using Android.Content; using Android.OS; using MvvmCross; using MvvmCross.Droid.Support.V7.AppCompat; using MvvmCross.Forms.Views; using MvvmCross.ViewModels; using System; using Xamarin.Forms.Platform.Android; [....] private void SetupPage() { if (_pageType == null) throw new NullReferenceException("ContentPage type can't be null. Call SetTypes() before creating the Intent"); if (_viewModelType == null) throw new NullReferenceException("ViewModel type can't be null. Call SetTypes() before creating the Intent"); var viewModel = Mvx.IoCProvider.Resolve(_viewModelType) as IMvxViewModel; var page = Activator.CreateInstance(_pageType) as MvxContentPage ?? Mvx.IoCProvider.Resolve(_pageType) as MvxContentPage; if(page == null || viewModel == null) return; page.ViewModel = viewModel; var fragment = page.CreateSupportFragment(this); SupportFragmentManager .BeginTransaction() .Replace(Resource.Id.fragment_container, fragment) .Commit(); }
解决方案
- 统一使用AndroidX库:Xamarin.Forms和新版MvvmCross已全面迁移至AndroidX,将代码中所有
Android.Support.V4.App.Fragment替换为AndroidX.Fragment.App.Fragment。同时检查项目依赖,移除旧的Xamarin.Android.Support.v4等Support库,添加对应的AndroidX库(如Xamarin.AndroidX.Fragment)。 - 匹配SupportFragmentManager类型:若你的Activity继承自
MvxAppCompatActivity,其SupportFragmentManager属于AndroidX体系,必须配合AndroidX的Fragment使用,不能混用旧Support库的类型。 - 确认MvvmCross版本:确保使用MvvmCross 7.0及以上版本,该版本开始全面支持AndroidX,旧版本依赖的Support库会导致类型不兼容问题。
内容的提问来源于stack exchange,提问作者joisberg
相关产品推荐
相关产品推荐

