迁移Xamarin.Android至MAUI:GetActivity()返回空值问题排查
问题原因与解决办法
核心原因
你的BaseActivity继承的是原生Android的AppCompatActivity,而非MAUI框架提供的MauiAppCompatActivity或MauiActivity。MAUI的MauiApplication.Current.GetActivity()仅会跟踪MAUI自身管理的Activity实例,因此无法获取到你自定义的原生Activity对象。
解决步骤
1. 切换MAUI兼容的Activity基类
将BaseActivity改为继承MauiAppCompatActivity,让MAUI能够识别并跟踪该Activity:
[Activity(Label = "BaseActivity")] public class BaseActivity : MauiAppCompatActivity, ISessionExpired, IPBottomNavBarIcon
2. 直接使用当前Activity实例(最简便)
如果不想修改继承关系,在Activity内部直接用this即可替代MauiApplication.Current.GetActivity()——在Activity的生命周期方法(如OnCreate、OnResume)中,this本身就是有效的Activity实例:
// 无需额外获取Activity,直接用当前实例 var component = new ComponentName(this, this.Class); var activityInfo = PackageManager.GetActivityInfo(component, 0);
3. 自定义Activity引用跟踪(跨场景使用)
如果需要在非Activity类中获取该原生Activity,可自定义静态类维护当前Activity的引用:
public static class ActivityTracker { public static AppCompatActivity CurrentActivity { get; set; } } // 在BaseActivity的生命周期中更新引用 protected override void OnResume() { base.OnResume(); ActivityTracker.CurrentActivity = this; } protected override void OnPause() { base.OnPause(); if (ActivityTracker.CurrentActivity == this) { ActivityTracker.CurrentActivity = null; } }
后续在需要的地方直接调用ActivityTracker.CurrentActivity即可获取实例。
内容的提问来源于stack exchange,提问作者angleUr
相关产品推荐
相关产品推荐

