You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:22:03